类和对象2

类和对象(中)
1  类的6个默认成员函数
任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
包括用来实现初始化和清理工作的构造函数、析构函数,用来实现拷贝复制的拷贝构造函数和赋值重载函数,和取地址重载函数
默认成员函数自带初始化和清理,从而解决初始化和销毁经常忘记、写起来繁琐等问题
* 经过编译器处理之后,类A不在为空,它会自动的生成六个默认的成员函数,即使这六个成员函数什么也不做。(这些成员函数当我们没有定义时,编译器会显示的调用)处理之后相当于:
一、构造函数
函数名是定死的,和类名相同,无返回值(也不需要写void),自动调用,可以重载,完成初始化工作
特性:
1、函数名与类名相同。
2、无返回值。
3、对象实例化时编译器 自动调用对应的构造函数。
4、构造函数可以重载,实参决定了调用哪个构造函数
6、无参构造函数和带有缺省值的构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个;
7、构造函数不能用const修饰(因为const修饰类的成员函数时,该函数不能修改成员变量,但是构造函数要修改类的成员变量,因此不可以由const修饰)
如在栈里用Stack代替Init,正式使用时不用调Init也可以正常跑
写法:
使用:
5、 如果没有显示的调用时,编译器会提供一个默认的构造函数
会生成随机值
C++里把类型分成两类 
1)内置类型/基本类型:语言本身定义的类型 int char double等
2)自定义类型:用struct class等等定义的类型
我们不写,编译器默认生成的构造函数,对于 内置类型不做处理,自定义类型会去调用它的默认构造
自定义类型一定会处理 (有个别编译器也会处理)
什么情况下可以让编译器自己生成呢?
1)一般情况下,有内置类型成员,就需要自己写构造函数,不能用编译器自己生成的。
2)全部都是自定义类型成员,可以考虑让编译器自己生成
经典场景:两个栈实现队列
C++11标准发布的时候打了补丁:在成员声明的时候可以给缺省值
无参和全缺省的构造函数不可以同时存在,语法上构成函数重载,调用存在歧义
构造函数虽然可以重载,但是写成全缺省最香,因为无参调用存在歧义,全缺省和无参的重载函数不能同时存在
总结:不传参数就可以调用的是默认构造函数
可以不写构造函数和析构函数,编译器默认生成初始化和清理
1)一般情况下,构造函数都需要自己写
2)两种情况下用自动生成
a.  内置类型的成员都有缺省值且初始化符合要求
b.  全是自定义类型的构造,且这些类型都定义了默认构造
二、析构函数
完成清理工作,对象在销毁时会自动调用(类比Destroy)
特性:
1、函数名是在类名前加一个~
无Destroy但对象生命周期结束后自动完成这个工作
完美解决忘记调用初始化和清理函数时产生的问题
对象生命周期到了以后自动调用
特性:
1、对内置类型不做处理
2、自定义类型
1)一般情况下,有动态申请资源,就需要写析构函数释放资源
2)没有动态申请的资源,不需要写析构
3)需要释放资源的成员都是自定义类型,不需要写析构
日期类不需要析构
3、拷贝构造函数
某些场景下有拷贝的需求,比如不想改变当前场景下的日期,但是需要算当前日期后100天的新日期
如何完成拷贝:用同类型的对象进行拷贝,采用传值调用,参数是拷贝的参数会引发无穷递归
传指针或引用(引用更好,指针是内置类型)
拷贝构造一般会建议加一个const
加const的原因:写反了能检查出来
为什么拷贝构造函数可以讲一个半小时啊,有空把4.25的重新听一下
深浅拷贝:
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。 对其中任何一个对象的改动都会影响另外一个对象
深拷贝是指  源对象与拷贝对象互相独立  ,其中任何一个对象的改动都不会对另外一个对象造成影响。
5 赋值运算符重载
能够让自定义类型去使用内置类型
操作符有几个操作数,重载函数就有几个参数
有五个运算符不能重载:. *   : :(域作用限定符) sizeof    ? :    .
传值返回:返回构造。传引用返回:返回别名
this的生命周期:函数形参,函数结束就结束
分清赋值和拷贝构造
流插入:右边的对象流向左边
C语言需要指定类型,而C++可以自动识别(转化调用,每个重载一遍)
函数重载支持自动识别类型
友元函数:可以用对象访问私有
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值