C++类中的默认成员函数

目录

构造函数

析构函数

拷贝构造函数

赋值运算符重载

C++的类中由六个常见的默认成员函数。为什么叫默认成员函数,这是因为我们没有编写时编译器会自动生成。我们先来看看起初始化和清理功能和起拷贝复制作用的四个成员函数。构造函数、析构函数、拷贝构造函数以及赋值重载。

构造函数

构造函数是类里起初始化功能的函数。常见的默认构造函数有“无参构造、全缺省构造、编译器自动生成的无参构造”。构造函数能将自定义类型初始化,可以自己实现也可以不实现,但编译器自己实现的构造函数只能实现最基础的功能,往往达不到想要的效果。

构造函数的函数名与类类型一致:

class Data{
public:
Data()
{
year=0;
month=0;
}
private:
int year;
int month;
};

自己写了构造函数编译器便不会再自动生成。无参构造与全缺省构造也有且只能存在其一,否则虽然构成函数重载,但会引发调用歧义。

析构函数

析构函数是类的默认成员函数中起清除作用的函数。与构造函数相同的是,如果不自己写编译器也会自动生成,如果写了就不再自动生成。但如果申请了资源、内存空间,编译器是不会清除的,从而导致内存泄漏(但不报错)。格式:

~Data()
{
year=0;
month=0;
}

析构函数在程序运行结束时会自动调用,且由于其没有参数,无法构成函数重载

拷贝构造函数

拷贝构造函数是构造函数的重载函数,函数名与类名相同。但与构造函数不同的是,拷贝构造函数第一个显示的形参是对自身类类型的引用。

Data(const Data& a,int x=0);

C++规定,类类型传值调用必须调用拷贝构造,所以如果第一个参数不采用引用的方式,就会引发无穷调用拷贝构造。拷贝构造函数一般只需要一个参数,如果要补充形参,则需要给缺省值。

赋值运算符重载

讲了拷贝构造函数就必须要提一嘴赋值运算符重载了,这两个默认成员函数有很多相似之处。自己没写时,编译器会自动生成拷贝构造函数和赋值运算符重载。但这两个自动生成的函数只能实现浅拷贝,一个字节一个字节地拷贝,当自定义成员变量中有指向资源时,它们不会划分新的空间,导致这两块数据相互覆盖,相当于生成了一个对原对象的引用。所以当我们需要手写析构函数来释放资源时,就意味着这两个函数也需要自己写了。

a=b;

//Data a=b;

值得注意的是,赋值运算符适用于两个已经存在的对象,与拷贝构造看着很像,注意区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值