構造函數調用規則
- 默認情況下,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)
//{
//}