c++类和对象(中)

类的6个默认成员函数:
分3类:
1、初始化和清理
构造函数:
主要完成初始化操作
与类名相同
没有返回值
可以有多个重载
构造函数会自动调用自定义成员的默认构造函数初始化自定义成员
全缺省相当于无参,都是默认构造函数(只能用其中的一个)
补充:
初始化列表(定义成员变量)
格式:
:_year(year)
,_month(month)
,_day(day)
初始化只能是一次
需要注意3点:
a.引用变量必须在初始化列表中(原因是必须在定义的时候初始化)
b.const成员必须在初始化列表中
c.自定义成员类型,如果没有默认构造,就必须在初始化列表中写出来
析构函数:
~类名()
清理但是不销毁,无返回值无参数,只有一个不可重载,在对象的生命周期结束时调用,这里需要提到的是在数据结构中的一般都需要析构
比如说有这样一个函数
int main()
{
s1;
s2;
}
a.构造时先s1后s2,析构时先s2后s1
b.当然析构函数并不是所有都需要自己实现的,申请了空间的才需要自己实现析构
c.实例化对象就会调用构函数
d.构造和拷贝构造都会创建新的对象,赋值操作会改变已有对象的内容
2、拷贝复制
拷贝构造函数 Date(const Date& d)
a.本质也是一种构造函数,具有构造函数的性质
b.用已有的对象创建一个完全一样的对象,这是编译器自动调用的
c.参数传的是引用而不是值,传值会造成无穷递归
d.只要有传参数传值就有拷贝构造
3、运算符重载
a.运算符重载就是不改变原来运算符的特性,实现一些更为复杂的运算,比如说日期类的相加,由于对于日期来说每个月的天数也不完全相同,年数也有限制,月数也有要求,不能按照相加的原算法则直接相加,这样很容易出现问题。
b.operator+要重载的运算符(参数列表)参数至少有一个是自定义类型或者枚举类型
c.有5个运算符不能重载,分别是:(.* sizeof ?: . ::)
d.当作为成员函数时,参数会少一个,this指针占用了第一个
赋值运算符重载
先看这样一个代码:
int main()
{
int a=b=10;
}
我们都知道这是一个连续的赋值操作,执行顺序是从右往左的,先把10赋给b,再把b返回的结果赋给a,所以必须有赋值运算符重载时必须得有返回值。由于传值的话就会发生发生拷贝构造,所以就要返回当前引用的对象
重载赋值运算符一般要注意3点:
a.赋值运算符重载一般先要检查是否自己给自己赋值
b.有返回值才可连续赋值
c.传参和传返回值用引用
一般代码如下:
Date& operator(const Date& d)
{
if(this!=d)
{
_year=d.year;
.
.
;
}
编译器默认生成赋值运算符重载函数完成浅拷贝
d1=d2相当于调用了
d1.operator=-(d1,d2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值