C++类的6个默认成员函数

一、构造函数

1.概念:名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初
	始值,并且在对象的生命周期内只调用一次。
2.特性:虽然名字叫构造,但其主任务并不是开辟空间创建对象,而是初始化对象。
	-函数名与类名相同,
	-无返回值,
	-对象实例化时编译器自动调用对应的构造函数,
	-构造函数可以重载,
	-通过无参构造函数创建对象时,对象后面不用跟括号,否则就变成了函数声明,
	-如果类中没有显示定义构造函数,C++编译器会自动生成一个无参的默认构造函数,一旦用户显示
		定义,编译器将不再生成,
	-无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。无参、
		全缺省、我们没写编译器默认生成的构造函数,都可以认为是默认成员函数。
3.问:编译器生成的默认构造函数有什么用?
	答:C++将类型分为内置类型(基本类型)和自定义类型。内置类型就是语法已经定义好的类型,
		如int/char...,自定义类型就是我们使用class/struct/union自己定义的类型,编译器
		生成的默认构造函数会对自定类型成员_t调用它的默认成员函数。

二、析构函数

1.概念:析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的,而对象在销毁时会自动
	调用析构函数,完成类的一些资源清理工作。
2.特性:
	-析构函数名是在类名前面加上字符~,
	-无参数无返回值,
	-一个类有且只有一个析构函数,若未显示定义,系统会自动生成默认的析构函数,
	-对象生命周期结束时,C++编译系统会自动调用析构函数,
	-编译器生成的默认析构函数,会对自定义类型成员调用它的析构函数。

三、拷贝构造函数

1.概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型
	对象创建新对象时由编译器自动调用。
2.特性:
	-拷贝构造函数是构造函数的一个重载形式,
	-拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用,
	-若未显示定义,系统生成默认的拷贝构造函数,默认的拷贝构造函数对象按内存存储,按字节序完成
		拷贝,这种拷贝我们叫做浅拷贝,或者值拷贝,
	-编译器生成的默认拷贝构造函数的值拷贝(浅拷贝),在调用析构函数时,存在问题,需要深拷贝去
		解决。

四、赋值运算符重载

1.C++为了增强代码的可读性引入了运算符重载;
2.函数原型:返回值类型 operator操作符(参数列表);
3.注:
	-不能通过连接其他符号来创建新的操作符,比如:operator@,
	-重载操作符必须有一个类类型或者枚举类型的操作数,
	-用于内置类型的操作符,其含义不能改变,例如:内置的整形+,不能改变其含义,
	-作为类成员的重载函数时,其形参看起来比操作数数目少1,成员函数的操作符有一个默认的形参
		this,限定为第一个形参,
	-(.*)、(::)、(sizeof)、(?:)、(.)注意以上5个运算符不能重载;
4.如果将运算符重载为全局的,就需要成员变量是公有的,可是成员变量为公有,应该如何保证封装性?
	答:友元函数可以解决,或者直接重载为成员函数。
5.重载为成员函数时,左操作数是this指向的调用函数的对象;
6.赋值运算符重载主要有四点:
	-参数类型	-返回值		-检测是否自己给自己赋值		-返回*this
7.一个类如果没有显示定义赋值运算符重载,编译器会生成一个,完成对象按字节的值拷贝。

五、取地址及const取地址操作符重载

1.这两个默认成员函数一般不用重新定义,使用编译器生成的默认取地址的重载即可;
2.在特殊情况下,例如希望别人获取指定的内容等,才需要重载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值