关于派生类的构造函数和析构函数
2013-01-04 16:47
316 查看
关于派生类的构造函数和析构函数
之前必须搞清的知识点:1.基类的构造函数不能被继承如果对派生类新增成员进行初始化,就必须为派生类添加新的构造函数。
2.只需对派生类的新增成员初始化,基类成员的初始化,只需调用相应的基类构造函数。
3.派生类的构造函数需要给基类的构造函数传递参数(达到基类初始化的作用)
一.派生类的构造函数 和析构函数
一般意形式:
派生类名::派生类名(参数总表):基类名1(参数1),…,基类名n(参数n),
内嵌对象名1(内嵌对象参数表1),…, 内嵌对象名m(内嵌对象参数表m)
{
派生类新增成员的初始化语句;
}
1.派生类名与类名相同
2.构造函数的参数表中,需要给出初始化基类的数据、新增内嵌对象数据及新增一般成员数据所需要的全部参数
3.在参数总表后面,列出需要使用的参数进行初始化的基类名和内嵌成员名及各自得参数表,各项之间用逗号分开
4.这里的基类名、对象名之间的顺序无关紧要,它们各自出现的顺序可以是任意的。
5.在生成累的类的对象时,系统首先会使用这里列出的参数,调用基类和内嵌对象成员的构造函数。
6.当一个类同时有几个基类时,对于所有需要给予参数进行初始化的基类,都要显式给出基类名和参数表,对于默认使用构造函数的基类,可不给予类名。同样,对于对象下成员,如果是使用默认的构造函数,也不需要对象名和参数表。对于单继承这种特殊的情况,就只需要写一个基类名称。
7.“什么时候需要声明派生类的构造函数??”——如果基类声明了带有形参表的构造函数时,派生类就应什么构造函数。
提供一个将参数传递给基类的构造函数的途径,以保证在基类进行初始化时能够获得必要的数据。
8.析构函数:其作用是完成对象消亡前的一些清理工作,调用顺与构造函数恰好相反。
9.派生类构造函数执行的顺序
A.调用基类构造函数,调用顺序安照被继承是声明的顺序(从左到右)
B.调用内嵌成员对象的构造函数,调用顺序按照他们在类中的顺序
C.派生类的构造函数体中的内容
#include <iostream>
using namespace std;
class B1 //基类B1,构造函数有参数
{
public:
B1(int i) {cout<<"constructing B1 "<<i<<endl;}
~B1(){cout<<"dstructing B1 "<<endl;}
};
class B2 //基类B2,构造函数有参数
{
public:
B2(int j) {cout<<"constructing B2 "<<j<<endl;}
~B2(){cout<<"dstructing B2 "<<endl;}
};
class B3 //基类B3,构造函数无参数
{
public:
B3(){cout<<"constructing B3 *"<<endl;}
~B3(){cout<<"dstructing B3 "<<endl;}
};
class C: public B2, public B1, public B3 //派生新类C
//注意基类名的顺序
{
public: //派生类的公有成员
C(int a, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b)
{cout<<"constructing C "<<endl;}
~C()
{cout<<"dstructing C "<<endl;}
//注意基类名的个数与顺序
//注意成员对象名的个数与顺序
private: //派生类的私有对象成员0
B1 memberB1;
B2 memberB2;
B3 memberB3;
};
int main()
{
C obj(1,2,3,4);
}
运行结果:
相关文章推荐
- 关于基类和派生类的构造函数和析构函数的执行顺序问题
- 关于派生类的构造函数和析构函数
- 关于基类和派生类的构造函数和析构函数的执行顺序问题
- 关于派生类构造函数一个错误的理解?
- 关于C#中派生类调用基类构造函数的理解 base使用
- 读书笔记--C++程序设计(第2版)--11.5派生类的构造函数和析构函数
- C++基础:派生类的构造函数与析构函数调用顺序
- 关于基类和派生类的拷贝、赋值构造函数【转】 参考度4.5星
- 关于基类与派生类的析构函数
- 关于构造函数析构函数和异常的一点点
- 派生类生成过程——单继承的构造函数和析构函数(2)
- 关于默认构造函数、复制构造函数、析构函数、赋值操作的各种测试探索
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
- C++派生类构造函数和析构函数调用顺序
- 构造函数和析构函数在基类和派生类之间的调用顺序
- C++中类的继承与Java中的不同,C++的派生类不能继承父类的构造函数和析构函数(不一定正确)
- 关于C#中派生类调用基类构造函数的理解[转]
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
- c++之派生类的构造函数与析构函数问题
- 例4.8 含有对象成员的派生类构造函数和析构函数的执行顺序