C++学习笔记_3:多继承时的类声明及构造和析构函数
2013-05-16 14:22
274 查看
//基类与派生类的对应关系 //单继承: 派生类只从一个基类派生。 //多继承: 派生类从多个基类派生。 //多重派生: 由一个基类派生出多个不同的派生类。 //多层派生: 派生类又作为基类,继续派生新的类。 //class 派生类名:继承方式1 基类名1,继承方式2 基类名2,... //{ // 成员声明; //} //注意:每一个"继承方式",只用于限制对紧随其后之基类的继承。 //继承时的构造函数: //基类的构造函数不被继承,需要在派生类中自行声明。 //声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化由基类完成。 //多继承时的构造函数: //派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数) //{ // 本类成员初始化赋值语句; //}; //派生类与基类的构造函数: //当基类中声明有缺省形式的构造函数或未声明构造函数时,派生类构造函数的声明中可以省略对基类构造函数的调用。 //若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。 //当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,提供将参数传递给基类构造函数的途径。 //构造函数的调用次序: //1. 调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 //2. 调用成员对象的构造函数,调用顺序按照它们在类中声明的顺序。 //3. 派生类的构造函数体中的内容。 //派生类构造函数举例: #include <iostream.h> class B1 //基类B1,构造函数有参数 {public: B1(int i) {cout<<"constructing B1 "<<i<<endl;} }; class B2 //基类B2,构造函数有参数 {public: B2(int j) {cout<<"constructing B2 "<<j<<endl;} }; class B3 //基类B3,构造函数无参数 {public: B3(){cout<<"constructing B3 *"<<endl;} }; class C: public B2, public B1, public B3 { public: //派生类的公有成员 C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b) {} private: //派生类的私有对象成员 B1 memberB1; B2 memberB2; B3 memberB3; }; int main(void) { C obj(1,2,3,4); return 0; }
//多继承且有内嵌对象时的构造函数: //派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基类名2(参数), ...基类名n(参数),对象数据成员的初始化 //{ // 本类成员初始化赋值语句; //}; //构造函数的调用次序 //1. 调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 //2. 调用成员对象的构造函数,调用顺序按照它们在类中声明的顺序。 //3. 派生类的构造函数体中的内容。 //派生类析构函数举例 #include <iostream.h> class B1 //基类B1声明 { public: B1(int i) { cout<<"constructing B1 "<<i<<endl; } ~B1() { cout<<"destructing B1 "<<endl; } }; class B2 //基类B2声明 { public: B2(int j) { cout<<"constructing B2 "<<j<<endl; } ~B2() { cout<<"destructing B2 "<<endl; } }; class B3 //基类B3声明 { public: B3() { cout<<"constructing B3 *"<<endl; } ~B3() { cout<<"destructing B3 "<<endl; } }; class C: public B2, public B1, public B3 { public: C(int a, int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b) { } private: B1 memberB1; B2 memberB2; B3 memberB3; }; int main(void) { C obj(1,2,3,4); return 0; }
相关文章推荐
- c++基础学习11-c++继承的构造和析构函数
- C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序
- GeekBand学习笔记:C++三大函数:拷贝构造、拷贝赋值、析构函数
- c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)
- C++学习笔记_2:单一继承时的构造函数与析构函数
- C++学习笔记50——继承中的析构函数
- C++学习笔记--继承中的构造与析构
- c++学习笔记4,调用派生类的顺序构造和析构函数(一个)
- C++学习笔记4--静态属性 静态方法 虚方法 抽象方法 多态性 析构函数 运算符重载 多继承 虚继承
- C++学习笔记25,永远将析构函数声明为virtual
- C++学习笔记:继承中的构造与析构
- C++ 学习笔记(18)异常处理(noexcept说明符和noexcept运算符、构造函数的try和catch)、命名空间(using声明和using指示)、多继承(虚继承)
- C++学习笔记12 构造函数与析构函数下
- C++继承时构造与析构函数以及using,继承时的遮蔽浅谈
- C++中继承方式与访问标号的学习笔记
- C++学习笔记之继承
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
- C++学习笔记――继承和组合
- c++学习笔记之声明和定义的关系
- C++学习笔记--多重继承的问题