栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第6章类的继承2

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第6章类的继承2

目录

派生类的构造函数

单继承时构造函数的定义的语法

代码示例

 多继承时构造函数的定义语法

 派生类与基类的构造函数

代码举例


派生类的构造函数

在默认情况下,基类的构造函数不被继承,派生类需要定义自己的构造函数

若不继承基类的构造函数

派生类新增的成员:派生类定义的构造函数初始化

继承来的成员:自动调用基类的构造函数进行初始化

派生类的构造函数需要给基类的构造函数传递参数。

单继承时构造函数的定义的语法
派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表),本类成员初始化列表
{
    //其他初始化
}

代码示例
#include 
using namespace std;

class B{
public:
	B();
	B(int i);
	~B();
	void print()const;
private:
	int b;
};
B::B(){
	b=0;
	cout<<"调用B的默认构造函数"< 

 

 运行结果

 多继承时构造函数的定义语法
派生类名:派生类名(参数表):
基类名1(基类1初始化参数表),
基类名2(基类2初始化参数表),
基类名3(基类3初始化参数表)
...
基类名n(基类n初始化参数表),
本类成员初始化列表
{
    //其他初始化
}

 派生类与基类的构造函数
  • 当基类有默认构造函数时

派生类构造函数可以不向基类的构造函数传递参数。构造派生类的对象时,基类的默认构造函数将被调用。

  • 如需执行基类中带有参数的构造函数

派生类构造函数应为基类构造函数提供参数。【基类的构造函数需要参数】

  • 多继承且有对象成员时派生的构造函数定义语法
派生类名::派生类名(形参表):
基类名1(参数),基类名2(参数),...,基类名n(参数)
本类成员(含对象成员) 初始化列表
{
    //其他初始化
}

  •  派生类构造函数的执行顺序
  1. 调用基类构造函数
  2. 对初始化列表中的成员进行初始化
  3. 执行派生类的构造函数体中的内容

代码举例
#include 
using namespace std;

class Base1{
public:
	Base1(int i){
		cout<<"构造Base1"< 

运行结果 

 

注意,虽然改变初始化列表的次序,程序执行不会有变化,但还是建议按照定义的顺序来进行初始化

 如上图,蓝框与红框处的代码位置进行了交换,虽然代码经过编译 ,运行结果不变,但编译器会有警告。

 可以参考这个网址的,来体会体会百篇大计敬本年之C++坎坷之路 —— Warning:will be initialized after [-Wreorder] 技术指南

派生类的复制构造函数

如果程序员没有编写复制构造函数,编译系统会自动生成一个隐含的复制构造函数,它会自动调用基类的复制构造函数,然后对派生类新增的成员一一复制。

如果要编写派生类的复制构造函数
  1. 先调用基类的复制构造函数
  2. 再为派生类新增的成员执行复制
如果派生类定义了复制构造函数
  1. 一般要为基类的复制构造函数传参数
  2. 复制构造函数只能接收一个参数

基类的复制构造函数形参是基类对象的引用,实参可以是派生类对象的引用。

基类复制构造函数的形参:

  1. 用来初始化派生类定义的成员
  2. 也被用来传递给基类的复制构造函数

例:

C::C(const &c1):B(c1){...}//B是基类,C是派生类
派生类的析构函数  派生类析构函数的声明

析构函数不被继承,派生类如果需要,需自行声明析构函数

声明方法与无继承关系时类的析构函数相同

派生类析构函数的调用

不需要显示调用基类的析构函数,系统会自动调用。

派生类析构函数中语句的执行顺序
  1. 先执行派生类析构函数的函数体
  2. 再调用基类的析构函数

和构造时的执行顺序相反

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号