C++继承派生类构造函数的写法

C++有三大思想:抽象与封装、继承与派生、多态性,是c++开发人员面对对象编程必须掌握的知识。

初学者对子类继承中构造函数的写法有时会存在一些问题。即子类继承基类时,子类的构造函数如何实现呢?如何调用基类的成员变量?相信大部分初学c++时,都会遇到类似的问题。

我们都知道继承中,当子类建立一个对象时,执行构造函数的顺序是:

①派生类构造函数先调用基类的构造函数

②再执行派生类构造函数本身(即派生类构造函数的函数体)

派生类的构造函数可以大致分为:

a.简单的派生类的构造函数 

格式:

派生类构造函数名(总参数表):基类构造函数名(参数表)

{

派生类中新增数据成员初始化语句

}

b.有子对象的派生类的构造函数

格式:

派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)

{

派生类中新增数据成员初始化语句

}

c.多层派生时的构造函数  

注意:不是定义基类构造函数,而是调用积累的额构造函数,因此这些参数是实参而不是形参。

 

下面用代码讲解一下子类构造函数的实现。

①定义class A,class B继承class A,class C继承class B:

class A
{
public:

	A(int a1, int b1, char c1);
	int a;
	int b;
	char c;
};
class B : public A
{
public:
	B();
	B(int a1, int b1, char c1);
};
class C :public B
{
public:
	C();
	C(int a1, int b1, char c1);
};

 class A的构造函数实现:

A::A(int a1, int b1, char c1)
{
	a = a1;
	b = b1;
	c = c1;
}

②class B的构造函数实现

B::B() :A(a, b, c)//调用基类的成员变量值
{
	a = 20;
	b = 10;
	c = 'g';
}
B::B(int a1, int b1, char c1) :A(a, b, c)//构造函数的重载
{
	a = a1;
	b = b1;
	c = c1;
}

③class C的构造函数实现

C::C() :B()
{

}
C::C(int a1, int b1, char c1) : B(a,b,c)
{
	a = a1;
	b = b1;
	c = c1;

}
//C::C(int a1, int b1, char c1) : B()//与上面一样
//{
//	a = a1;
//	b = b1;
//	c = c1;
//}

④main函数代码:

int main(int argc, char *argv[])
{
	A ff(1, 2, 'c');
	cout << ff.a <<" "<< ff.b <<" "<< ff.c << endl;
	B b1;
	cout << b1.a <<" "<< b1.b <<" "<< b1.c << endl;
	B b2(10,10,'i');
	cout << b2.a << " " << b2.b << " " << b2.c << endl;

	C c1;
	cout << c1.a << c1.b << c1.c << endl;
	C c2(100,100,'u');
	cout << c2.a << c2.b << c2.c;

	system("pause");
	return 0;
}

结果: 1  2  c

20 10 g

10 10 i

20 10 g

100 100 u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值