c++從入門到精通——構造函數調用規則

構造函數調用規則

  • 默認情況下,c++編譯器至少爲我們寫的類增加3個函數
    1.默認構造函數(無參,函數體爲空)
    2.默認析構函數(無參,函數體爲空)
    3.默認拷貝構造函數,對類中非靜態成員屬性簡單值拷貝
  • 如果用戶定義拷貝構造函數,c++不會再提供任何默認構造函數
  • 如果用戶定義了普通構造(非拷貝),c++不在提供默認無參構造,但是會提供默認拷貝構造

例子1

class MyClass2
{
public:

	MyClass2(const MyClass& m)
	{
	}
	int m_A;

};

void test02()
{
	MyClass2 c1;
}

用戶定義拷貝構造函數,c++不會再提供任何默認構造函數
運行報錯
這時要手動添加,默認構造函數。

	MyClass2()
	{
		cout << "默認構造函數" << endl;
	}

例子2

#include <iostream>
using namespace std;

class MyClass
{
public:
	MyClass(int a)
	{
		cout << "有參構造函數" << endl;
	}

	int m_A;	
};

void test01()
{
	MyClass c1(1);
	c1.m_A = 10;
	MyClass c2(c1);
	cout << c2.m_A << endl;
}

int main()
{
	test01();
    return 0;
}

運行

有參構造函數
10

用戶定義了普通構造(非拷貝),c++不在提供默認無參構造,但是會提供默認拷貝構造

	//MyClass(const MyClass& m)
	//{
	//}

資料

構造函數調用規則

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