c++中对象创建时必然会调用类中的构造函数以给类成员赋值,还有在c++中对象的复制必然调用复制构造函数,对象之间的赋值必然会调用赋值函数,最后在对象释放时必然会调用析构函数。之前在刚学习c++时,总是对类成员的初始化顺序,什么时候调用复制构造函数,什么时候调用赋值函理解混乱,今天在回看c++ primer plus的时候,突然感觉应该梳理一遍c++默认函数系列。
1.构造函数的使用与注意事项
c++中使用最频繁之一就是构造函数。构造函数专门用于构造新对象、将值赋给它们的数据成员。每次创建类对象c++都会使用类构造函数,但是不可以使用对象调用构造函数。如:
#include "DefaultClassFunctionTest.h"
int main(){
DefaultClassFunctionTest* dd = new DefaultClassFunctionTest;
dd->show();
//error C2273: 'function-style cast' : illegal as right side of '->' operator
dd->DefaultClassFunctionTest();//不能调用
system("pause");
return 0;
}
c++中为每一个类都设置一个默认构造函数(即使不声明无参构造函数也可以创建实例),但是如果只声明了一个带参数的构造函数,则不能使用默认构造函数了。如下:
class DefaultClassFunctionTest
{
public:
...
};
#include "DefaultClassFunctionTest.h"
int main(){
DefaultClassFunctionTest* dd = new DefaultClassFunctionTest; //可以分配
dd->show();
delete dd;
system("pause");
return 0;
}
如果只声明了带有参数的构造函数则:
class DefaultClassFunctionTest
{
public:
DefaultClassFunctionTest(int avalue);
...
};
#include "DefaultClassFunctionTest.h"
int main(){
//编译错误:error C2512: 'DefaultClassFunctionTest' : no appropriate default constructor available
DefaultClassFunctionTest* dd = new DefaultClassFunctionTest;
DefaultClassFunctionTest* ddparam = new DefaultClassFunctionTest(2);//编译通过
system("pause");
return 0;
}
前面所述构造函数就是为类创建实例的时候赋值类成员,但是在c++中类成员的