您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: