構造函數和析構函數+“複製構造函數”(C++)

1.構造函數和析構函數作用

不同類型對象的初始化和清除工作是不一樣的,因此構造函數和析構函數都是從屬於某個類的。

即每個類都有構造函數和析構函數,它們是類的成員函數。

  •  構造函數的特點是:構造函數的名稱與類名相同,構造函數沒有返回值,一般定義爲公有函數。
  • 複製構造函數是一類特殊的構造函數,用來複制對象時候調用

類名(類名&對象名);  //複製構造函數原型

2. 派生類的構造函數和析構函數

基類的構造函數和析構函數不能被派生類繼承,派生類一般需要定義自己的構造函數和析構函數。

 如果基類只有有參構造函數,那麼子類不能置之不理,必須在子類構造函數中顯式的調用父類的構造函數。

派生類名::派生類名(基類所需的形參,本類所需的形參):基類1(基類參數列表),基類2(基類參數列表2)...... 

  • 構造函數調用順序:先父類後子類
  • 析構函數調用順序:先子類後父類
#include<iostream>
using namespace std;
class base
{
private:
	int m_base_data;
public:
	base(int data) { m_base_data = data; cout << "基類構造函數被調用" << endl; }
	~base() { cout << "基類的析構函數被調用,銷燬基類" << endl; }
};
class derliver :public base
{
private:
	double m_deriver_data;
	int *m_ptr;
public:
	derliver(int bd, double dd);
	~derliver();
};
derliver::derliver(int bd, double dd) :base(bd)
{
	m_deriver_data = dd;
	m_ptr = new int[256];
	if (m_ptr == NULL)
		cout << "子類的數組申請失敗" << endl;
	cout << "派生類構造函數被調用" << endl;
}
derliver::~derliver()
{
	if (m_ptr != nullptr)
	{
		delete[]m_ptr;
		cout << "派生類的析構函數被調用" << endl;
	}
}
int main()
{
	
	
	derliver obj(1, 3.0);
	cout << "主函數結束" << endl;
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章