默认情况下,C++编译器至少给一个类添加三个函数
- 默认构造函数(无参,函数体为空)
- 默认析构函数(无参,函数体为空)
- 默认拷贝构造函数,对属性进行值拷贝
构造函数调用规则如下:
- 如果用户定义有参构造函数,C++不再提供默认无参构造,但是会提供默认拷贝构造
- 如果用户定义拷贝构造函数,C++不再提供其他构造函数
#include <iostream>
using namespace std;
//按照参数分类 有参构造(默认构造) 无参构造
//按照类型分类 普通构造 拷贝构造
class Person{
public:
//构造函数
Person(){
cout << "Person 无参构造函数的调用!" << endl;
}
Person(int age){
m_Age = age;
cout << "Person 有参构造函数的调用!" << endl;
}
// //拷贝构造函数
// Person(const Person &p){
// m_Age = p.m_Age ;//将传入的person的属性拷贝到我身上
// cout << "Person的拷贝构造函数的调用!" << endl;
// }
//析构函数
~Person(){
cout << "Person 析造函数的调用!" << endl;
}
int m_Age;
};
void test01(){
Person p1;
p1.m_Age = 18;
Person p2(p1);
cout << "p2的年龄为 " << p2.m_Age << endl;
}
int main(){
test01();
system("pause");
return 0;
}
结果:
可以看到虽然没有自己写拷贝构造函数,但是p2的年龄仍然为18。其实是编译器在默认的拷贝构造函数中做了简单的值拷贝。