类和对象(默认成员函数)

6个默认成员函数

  • 任何一个类在我们不写的情况下都会生成6个默认成员函数
  • 构造函数完成初始化工作
  • 析构函数完成清理工作
  • 拷贝构造函数是使用同类对象初始化创建对象
  • 赋值重载主要是吧一个对象赋值给另一个对象
  • 取地址重载主要是普通对象和const对象取地址操作符重载

构造函数

构造函数不是开空间创建对象,而是初始化对象,更严谨的说是赋初值

特性

  • 构造函数名与类名相同,无返回值,可重载
  • 对对象实例化时编译器自动调用对应的构造函数,在对象的生命周期只调用一次
  • 如果没有显式定义构造函数,编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成
  • 无参构造函数、全缺省构造函数和编译器默认生成的构造函数统称为默认构造函数,并且默认构造函数只能有一个

初始化列表

class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
private:
	int _year;
	int _month;
	int _day;
};
  • 每个成员变量再初始化列表中只能出现一次
  • 类中的引用成员变量、const成员变量、类类型成员变量必须放在初始化列表位置进行初始化
  • 尽量使用初始化列表进行初始化,因为不管是否使用初始化列表,对于特定的成员变量一定会优先是由初始化列表初始化
  • 成员变量在类中的声明次序为初始化列表中的初始化次序,与其在初始化列表中的先后次序无关

explicit

  • 构造函数对于单个参数的构造函数具有类型转换的作用
  • explicit修饰的构造函数,将会禁止单参构造函数的隐式转换

析构函数

析构函数不是完成对对象的销毁,局部对象销毁由编译器完成,而在对象销毁时会调用析构函数,完成类的一些资源清理工作

特性

  • 析构函数名是类名前加~,无返回值
  • 一个类有且只有一个析构函数,若未显式定义,编译器会自动生成默认析构函数
  • 对象的生命周期结束时,编译器自动调用析构函数

拷贝构造函数

用已存在的类类型对象创建新对象

特性

  • 拷贝构造函数是构造函数的一个重载形式
  • 拷贝构造函数参数只有一个且必须使用引用传参,一般用const修饰,用传值传参会印发前无穷递归调用
  • 若未显式定义,编译器会自动生成默认拷贝构造函数,默认拷贝构造函数为按字节序的值拷贝即浅拷贝

赋值重载

运算符重载

  • 函数原型:返回值类型 operator 操作符(参数列表)
  • 不能连接其他符号创建新的操作符
  • 重载操作符必须有一个类类型或者枚举类型的操作数
  • 由于内置类型的操作符,其含义不能改变
  • 作为类成员的重载函数时,其形参看起来比操作数数目少一个成员函数的操作符有一个默认形参this,限定为第一个形参
  • .*、::、szieof、?:、.这五个运算符不能重载

赋值运算符重载

  • 赋值运算符重载有四点:参数类型、返回值、检测是否是自己给自己赋值、返回*this
  • 若未显式定义,编译器会自动生成默认赋值运算符重载,完成对象按字节序的值拷贝

取地址重载

普通对象(类名* operator&(){})和const对象(const 类名* operator&()const{})取地址重载函数一般不用重载,编译器会默认生成,除非想让别人获取到指定内容需要重载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值