派生类的说明和构造函数

news/2024/5/18 22:11:53 标签: 派生, 继承, 构造函数

写在前面

派生与继承介绍了派生继承的一些基本知识在这里我们将学习派生类的说明和构造函数">上一篇文章派生继承介绍了派生继承的一些基本知识,在这里我们将学习派生类的说明和构造函数

派生类的说明">派生类的说明

格式

class <类名>:<基类说明表>{
private:
    <私有成员表>
protected:
    <保护成员表>
public:
    <公有成员表>
};

派生方式基类名">其中<基类说明表>可以列出一个或多个基类,每个基类说明格式为:<派生方式><基类名>

例子

class D: public A, private B, protected C{
    ...
};

派生类的构造函数">派生类的构造函数

格式

<派生类名>(<参数总表>):<初始化符表>{
    <构造函数>
};

<参数总表>列出对象初始化需要的所有参数

<初始化符表>按如下格式构成:

<基类名1>(<基类参数表1>),...,<基类名n>(<基类参数表n>),<对象成员名1>(<对象成员参数表1>),...,<对象成员名n>(<对象成员参数表n>)

例子

class D: public A, private B, protected C{
    ...
public:
    D(int a, int b, int c, int d) :A(a), B(b), C(c){ 
        ...
    }
};

构造函数的调用按class-d-public-a-private-b-protected-c中基类的顺序从左到右依次执行然后再是初始化符表中的对象成员此例中没有最后才是自身因此总的顺序是a-b-c-d">构造函数的调用按class D: public A, private B, protected C中基类的顺序从左到右依次执行,然后再是初始化符表中的对象成员(此例中没有),最后才是自身,因此总的顺序是A->B->C->D。

综合例子

#include<iostream>
using namespace std;

class A{
    int a;
public:
    A(int n){ a = n; cout << "A::a = " << a << endl; }
    ~A(){ cout << "A destructed!" << endl; }
};

class B{
    int b;
public:
    B(int n){ b = n; cout << "B::b = " << b << endl; }
    ~B(){ cout << "B destructed!" << endl; }
};

class C:public A{
    int c;
public:
    C(int na, int nc) :A(na){ c = nc; cout << "C::c = " << c << endl; }
    ~C(){ cout << "C destructed!" << endl; }
};

class D :public B, public C{
    int d;
public:
    D(int nb, int nc1, int nc2, int nd) :B(nb), C(nc1, nc2){ d = nd; cout << "D::d = " << d << endl; }
    ~D(){ cout << "D destructed!" << endl; }
};

int main(){
    D obj(1, 2, 3, 4);
}

输出

B::b = 1
A::a = 2
C::c = 3
D::d = 4
D destructed!
C destructed!
A destructed!
B destructed!

http://www.niftyadmin.cn/n/1186769.html

相关文章

传输控制协议(transmission control protocol)——TCP 整理

TCP服务 1、TCP使用端口号来实现进程间通信 2、TCP 是一个面向流的协议。TCP 允许发送进程以字节流形式传递数据&#xff0c;并且接收进程也以字节流形式接收数 据。 3、因为发送和接收进程可能以不同的速度写入和读出数据&#xff0c;所以 TCP 需要用于存储的缓冲区。每一个…

类成员的访问控制

无论是类的数据成员还是函数成员&#xff0c;都被分为public、protected、private三种。 可能引用这些类成员的有五种函数&#xff1a;原类&#xff08;该成员所在类&#xff09;的函数、原类的友元函数、原类的友元的函数、原类的派生类的函数、类外函数。 我们把上面的五种…

剑指offer——第一章(C++实现)

写在前面的话 面试官会关注边界条件、特殊输入&#xff08;如nullptr指针、空字符串等&#xff09;以及错误处理。 题目1&#xff1a;把一个字符串转换成整数 边界条件&#xff1a; 1&#xff09;考虑到输入的字符串中有非数字字符和正负号 2&#xff09;要考虑到最大的正整…

原类

很多朋友在前面几篇文章里看到“原类”这个词&#xff0c;心中一定会有这样的疑问&#xff1a;“咦&#xff1f;这个‘原类’是什么东西&#xff0c;我怎么没见过也没听说过&#xff1f;” 原因很简单&#xff0c;那是我自创的啊&#xff01; “原类”的简单定义如下&#xff…

友元关系的继承

注意&#xff1a;以下内容仅由VS2013试验得出&#xff0c;不一定符合ISO标准 基类的友元不继承&#xff0c;即如果基类有友元类或友元函数&#xff0c;则其派生类不因继承关系也有此友元类或友元函数。 如果基类是某类的友元&#xff0c;这种友元关系同样不被继承的&#xff…

《Linux命令行与shell脚本编程大全》读书笔记————第一章 初识Linux shell

本章内容 1、什么是Linux 2、Linux内核的组成 1、1 什么是Linux Linux课划分为以下四部分 a&#xff09;Linux内核 b&#xff09;GNU工具 c&#xff09;图形化桌面环境 d&#xff09;应用软件 1.1.1 深入探究Linux内核 内核主要负责以下四种功能 a&#xff09;系统内存…

剑指offer第二章——c++实现 持续更新中

2.1面试官谈基础知识 1、c的基础知识&#xff08;面向对象的特性、构造函数、析构函数、动态绑定、内存管理&#xff09; 2、设计模式 3、uml图 4、并发控制 5、对os的理解程度 时间复杂度排序&#xff1a;O(1) > O(lognN) > O(n) > O(NlogN) > O(N*N) 2.2 编…

静态(static)成员的继承

如果基类中被派生类继承的成员是公开的或者保护的静态成员&#xff0c;则其静态属性也随静态成员被继承过来。 1.这些静态成员可以通过<类名>::<成员名>或是<对象名>.<成员名>的方式来引用或调用 2.这些成员无论有多少个类对象和派生类对象被创建&am…