2、类的6个默认成员函数:
如果一个类中没有任何成员,简称空类,空类不是什么都没有,而是会自动生成6个默认函数。
构造函数:
是一种特殊的成员函数,名字与类相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。
特性:
构造函数是特殊的成员函数,主要任务不是开空间创建对象,而是初始化对象。
函数名与类名相同;
无返回值;
对象实例化时编译器自动调用对应的构造函数。
构造函数可以重载;
如果类中没有显示定义构造函数,则c++编译器会自动生成一个无参的默认构造函数,
无参的构造函数、全缺省的构造函数、编译器默认生成的构造函数都叫做默认构造函数,并且默认构造函数只能有一个。
编译器生成的默认构造函数,会对内置类型变量初始化为随机值,会对自定义类型成员调用它的默认成员函数。
析构函数:
与构造函数相反,他的主要任务是完成类的一些资源清理工作。
特性:
析构函数名是在类名前面加字符~;
无参数无返回值。
一个类有且只有一个析构函数,若未显示定义,编译器会自动生成默认的。
对象生命周期结束时,c++编译系统会自动调用析构函数。
编译器生成的析构函数会对自定义类型成员调用它的析构函数。
拷贝构造函数:
只有单个形参,该形参是对本类类型对象的引用(一般用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。
特性:
拷贝函数是构造函数的一个重载形式,构造函数传参传递的是变量,拷贝构造函数传递的是对象。
拷贝构造函数的参数只有一个,且必须使用引用传参,使用传值方式传参会引发无穷递归调用。
若未显示定义构造函数,系统生成默认的构造函数,默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这叫做浅拷贝。
浅拷贝会造成析构函数2次释放同一块地址。
赋值运算符重载
运算符重载:
c++为了增加代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数。
函数名字为:operator后面直接加需要重载的运算符符号。
函数原型:返回值类型 operator操作符(参数列表)
注意:重载操作符必须有一个类类型或者枚举类型d的操作数。
用于内置类型的操作符,其含义不能改变。
作为类成员的重载函数时,其形参看起来比操作数目少1,是因为成员函数操作符有一个默认的形参this,限定为第一个形参。(就是说调用类成员函数时,会隐藏一个this指针,指向调用者)。
注意:.* :: sizeof ?: .这5个运算符不能重载。
赋值运算符重载:
返回值用引用返回;
返回的为*this
如果没有显示定义,编译器会生成一个,完成对象按照字节序拷贝。
c++只要是自定义类型,如果想要使用运算符,都得去重载运算符。