派生类的说明和构造函数

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

相关文章

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

Maven中的profiles使用及说明

《Maven中的profiles使用及说明》:本文主要介绍Maven中的profiles使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录主要用途定义 Profiles示例:多环境配置激活 Profiles示例:资源过滤示例:依赖管理总结Maven 中的

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