构造函数调用规则
- 默认情况下,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)
//{
//}