默认情况下,C++编译器至少会给一个类添加3个函数。
1、默认构造函数(无参,函数体为空) //即无参构造函数
2、默认析构函数(无参,函数体为空)
3、默认拷贝构造函数,对属性进行值拷贝。
构造函数的调用规则如下:
1)如果用户定义了有参构造函数,C++不会再提供默认构造函数(可自己写一个),但是会提供拷贝构造。
2)如果用户定义了拷贝构造函数,C++不会再提供其他构造函数(只提供析构)
//当用户写了拷贝构造函数之后,一定要提供有参/无参构造函数,否则无法初始化对象。
#includeusing namespace std; class Person{ public: Person() { cout << "Person无参构造函数的调用" << endl; } Person(const Person& p) { m_Age = p.m_Age; cout << "自己写的拷贝构造函数的调用" << endl; } int m_Age; }; int main(int argc,char *argv[]) { //1. 如果用户定义了有参构造函数,C++不会再提供默认构造函数,但是会提供拷贝构造。 //Person p1; 编译出错,因为系统没有提供默认构造,然后自己又没有写。 //Person p2(10); //Person p3(p2); //但是会提供拷贝构造 //cout << "p2的年龄:" << p2.m_Age << endl; //cout << "p3的年龄:" << p3.m_Age << endl; //2. 如果用户定义了拷贝构造函数,C++不会再提供其他构造函数。 //Person p1; //不提供默认构造函数 //Person p2(10); Person p2; //调用默认构造 p2.m_Age = 18; Person p3(p2); cout << "p2的年龄:" << p2.m_Age << endl; cout << "p3的年龄:" << p3.m_Age << endl; //总结: 当用户写了拷贝构造函数之后,一定要提供有参/无参构造函数,否则无法初始化对象。 return 0; //这里会调用系统提供空实现的默认析构函数。 }



