~Member1 ~S11 ~S1
我们再来看一看书中的实例。
//例5.7 多级派生情况下派生类的构造函数。 #include
{public: //公用部分 Student(int n, string nam ) //基类构造函数 {num=n; name=nam; }
void display( ) //输出基类数据成员 {cout<<\ cout<<\
protected: //保护部分
int num; //基类有两个数据成员 string name; };
class Student1: public Student //声明公用派生类Student1 {public:
Student1(int n,string nam,int a):Student(n,nam)//派生类构造函数
{age=a; } //在此处只对派生类新增的数据成员初始化 void show( ) //输出num,name和age { display( ); //输出num和name cout<<\
private: //派生类的私有数据 int age; //增加一个数据成员 };
class Student2:public Student1 //声明间接公用派生类Student2 {public:
//下面是间接派生类构造函数
Student2(int n, string nam,int a,int s):Student1(n,nam,a) {score=s;}
void show_all( ) //输出全部数据成员 { show( ); //输出num和name cout<<\ //输出score private:
int score; //增加一个数据成员 };
int main( )
{Student2 stud(10010,\
stud.show_all( ); //输出学生的全部数据
return 0; }
5.5.4 派生类构造函数的特殊形式 1)当不需要对派生类新增的成员进行任何初始化操作时,派生类构造函数的函数可以为空,即构造函数是空函数。
2)如果在基类中没有定义构造函数,或定义了没有参数的构造函数,那么,在定义派生类构造函数时可以不写基类的构造函数。 #include
public: Meb(){cout<<\};
class A {
public: A(){cout<<\ //A():m(){cout<<\private:
Meb m; };
class A1: public A {
public: A1(){cout<<\ //A1():A(){cout<<\};
int main() { A1 a1; }
5.5.5 派生类的析构函数 在派生时,派生类是不能继承基类的析构函数的,需要通过派生类的析构函数去调用基类的构造函数。 #include
public: Meb(){cout<<\ ~Meb(){cout<<\};
class A {
public:
A(){cout<<\ ~A(){cout<<\private:
Meb m; };
class A1: public A {
public: A1(){cout<<\ ~A1(){cout<<\};
int main() { A1 a1; }
从运行结果可以看出,调用析构函数的顺序正好与构造函数正好是相反的。即先执行派生类自己的析构函数,再调用子对象的析构函数,再调用基类的析构函数。
5.6 多重继承
前面讨论的是单继承,即一个类是从一个基类派生而来的。这节讲多重继承,即一个派生类同时继承多个基类。 5.6.1 声明多重派生继承的方法
下面从一个最简单的多重继承的实例中来看怎么声明多重派生。 #include
class B { int a; public: B(){cout<<\};
class C { int a; public: C(){cout<<\};
class D:public A,public B,public C {
public: D(){cout<<\};
int main() { D d; return 0; }
运行结果:A B C D
5.6.2 多重继承派生类的构造函数
上面的实例中的构造函数是无参数的,所以我们可以不用管构造函数的建立,下面来看一下如果有参数初始化时,构造函数应该怎么构造。 #include
using namespace std; class A { int a; public: A(int x){a=x;cout<<\};
class B { int b; public: B(int x){b=x;cout<<\};
class C { int c; public: C(int x){c=x;cout<<\};
class D:public A,public B,public C { int d; public: D(int x1,int x2,int x3,int x4):A(x1),B(x2),C(x3){d=x4;cout<<\};
int main() { D d(1,2,3,4); return 0; }
运行结果:A1 B2 C3 D4
从上例中可以看出,构造函数的形式如下:
派生类构造函数名(总参数表列):基类1构造函数(参数表列), 基类2构造函数(参数表列), 基类1构造函数(参数表列),...{派生类中新增数据成员初始化语句}
调用基类构造函数的顺序是按照声明派生类时基类出现的顺序。 下面来看一个书中的实例 //P176 例5.8
#include
class Teacher //声明Teacher(教师)类
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第5章 继承与派生(6)在线全文阅读。
相关推荐: