C++多继承

多继承时派生类的声明:

class 派生类名:继承方式1  基类名1, 继承方式2  基类名2,... {         成员声明; }

例:

class A {
public:
	void setA(int);
	void showA() const;
private:
	int a;
};
class B {
public:
	void setB(int);
	void showB() const;
private:
	int b;
};
class C : public A, private B { 
public:
	void setC(int, int, int);
	void showC() const;
private const:
	int c;
};
void  A::setA(int x) {
	a=x; 
}
void B::setB(int x) {
	b=x; 
}
void C::setC(int x, int y, int z) {
	//派生类成员直接访问基类的
	//公有成员
	setA(x); 
	setB(y); 
	c = z;
}
//其他函数实现略
int main() {
	C obj;
	obj.setA(5);
	obj.showA();
	obj.setC(6,7,9);
	obj.showC();
	return 0;
}

继承时的构造函数:基类的构造函数不被继承,派生类中需要声明自己的构造函数。 定义构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,自动调用基类构造函数完成。 派生类的构造函数需要给基类的构造函数传递参数。

单一继承时的构造函数:

派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表) {     本类成员初始化赋值语句; };

多继承时的构造函数:

派生类名::派生类名(参数表):基类名1(基类1初始化参数表), 基类名2(基类2初始化参数表), ...基类名n(基类n初始化参数表) {         本类成员初始化赋值语句; };

当基类中声明有缺省构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数,也可以不声明,构造派生类的对象时,基类的缺省构造函数将被调用。 当需要执行基类中带形参的构造函数来初始化基类数据时,派生类构造函数应在初始化列表中为基类构造函数提供参数。

构造函数的执行顺序:

1. 调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 2. 对成员对象进行初始化,初始化顺序按照它们在类中声明的顺序。 3.执行派生类的构造函数体中的内容。

拷贝构造函数:若建立派生类对象时没有编写拷贝构造函数,编译器会生成一个隐含的拷贝构造函数,该函数先调用基类的拷贝构造函数,再为派生类新增的成员对象执行拷贝。 若编写派生类的拷贝构造函数,则需要为基类相应的拷贝构造函数传递参数。例如: C::C(C &c1): B(c1) {…}

继承时的析构函数:析构函数也不被继承,派生类自行声明 声明方法与一般(无继承关系时)类的析构函数相同。 不需要显式地调用基类的析构函数,系统会自动隐式调用。 析构函数的调用次序与构造函数相反。

同名隐藏规则:当派生类与基类中有相同成员时: 若未强行指名,则通过派生类对象使用的是派生类中的同名成员。 如要通过派生类对象访问基类中被隐藏的同名成员,应使用基类名限定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值