构造函数调用规则
#include<bits/stdc++.h>
using namespace std;
class Person{
public:
Person(){
cout<<"Person的默认构造函数调用"<<endl;
}
Person(int age){
cout<<"Person的有参构造函数调用"<<endl;
m_Age=age;
}
Person(const Person &p){
cout<<"Person的拷贝构造函数调用"<<endl;
m_Age=p.m_Age;
}
~Person(){
cout<<"Person的析构函数调用"<<endl;
}
int m_Age;
};
void test01(){
Person p;
p.m_Age = 18;
Person p2(10);
cout<<"p2的年龄为:"<<p2.m_Age<<endl;
}
int main(){
test01();
return 0;
}
- 构造函数的调用规则:
- 在C++中,当创建一个类时,如果没有显式地定义构造函数,编译器会自动生成默认构造函数、析构函数和拷贝构造函数。
- 如果我们提供了有参构造函数,编译器不再提供默认构造函数,但依然提供拷贝构造函数。
- 如果我们提供了拷贝构造函数,编译器不再提供其他构造函数。
- 默认构造函数:
- 在
Person
类中定义了默认构造函数 Person()
,用于创建对象时的默认初始化。 - 在
test01()
中,使用了默认构造函数创建了对象 p
。
- 有参构造函数:
- 在
Person
类中定义了有参构造函数 Person(int age)
,用于创建对象时的带参数初始化。 - 在
test01()
中,使用有参构造函数创建了对象 p2
,并初始化了年龄为 10。
- 拷贝构造函数:
- 在
Person
类中定义了拷贝构造函数 Person(const Person &p)
,用于对象的拷贝初始化。 - 在代码中未显式调用拷贝构造函数,但在对象的复制或传递过程中会自动调用。
- 析构函数:
- 在
Person
类中定义了析构函数 ~Person()
,用于对象销毁时的资源释放。 - 在代码中,对象生命周期结束时会自动调用析构函数。