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++中构造函数、复制构造函数和赋值函数的使用和注意事项,包括成员初始化列表、静态成员、引用成员和常量成员的初始化顺序,以及复制构造函数和赋值函数的调用场景。通过实例解析了复制构造函数的访问权限和赋值函数的连锁赋值。
最低0.47元/天 解锁文章
1174

被折叠的 条评论
为什么被折叠?



