派生类的说明和构造函数

2024-03-29 10:08

本文主要是介绍派生类的说明和构造函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

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

派生类的说明

格式

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。

综合例子

#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.chinasem.cn/article/858308

相关文章

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

《idea报错java:非法字符:‘ufeff‘的解决步骤以及说明》:本文主要介绍idea报错java:非法字符:ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现uf... 目录BOM是什么?1. BOM的作用2. 为什么会出现 \ufeff 错误?3. 如何解决 \ufeff 问题?最

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C