C++继承知识点(2)

10 篇文章 0 订阅

当继承遇上构造函数:

其子类的构造顺序为,父类->子类。就如加盖总得有地基,不可能建造空中楼阁不是;同理,析构顺序相反。

1.无参构造 

#include <iostream>

using namespace std;

class A
{
public:
	int m_a;
	A()
	{
		cout << "A constructor!" << endl;
		m_a = 1;
	}
	~A()
	{
		cout << "A Distruct!" << endl;
	}
};

class B:public A
{
public:
	int m_b;
	B()
	{
		cout << "B constructor!" << endl;
		m_b = 1;	
	}
	~B()
	{
		cout << "B Distruct!" << endl;
	}
};

int main()
{
	A a1;
	cout << sizeof(a1) << endl;
	B b1;
	cout << sizeof(b1) << endl;
	
	return 0;
}

2.有参函数与const变量

#include <iostream>

using namespace std;

class A
{
public:
	int m_a;
	A(int a)
	{	cout << "A Constructor" << endl;
		m_a = a;
	}
	~A()
	{
		cout << "A Distruct" << endl;
	}
};

class C
{
public:
	int m_c;
	C(int c)
	{
		m_c = c;
		cout << "C Constructor" << endl;
	}
	~C()
	{
		cout << "C Distruct" << endl;
	}
};

class B:protected A
{
public:
	int m_b;
	C c;
	const int d;

	B(int b):A(1),c(2),d(4)
	{	
		cout << "B Constructor" << endl;
		m_b = b;
	}
	~B()
	{
		cout << "B Distruct" << endl;
	}
};



int main()
{
	B b1(2);
	return 0;
}

此时其构造函数的顺序变为父类->子类内部对象和const变量(由声明顺序决定)->子类。(注:有参函数的初始化需加入初始化列表)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值