3-21(类与对象补充)

2、类的6个默认成员函数:

如果一个类中没有任何成员,简称空类,空类不是什么都没有,而是会自动生成6个默认函数。



构造函数:

是一种特殊的成员函数,名字与类相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。

特性:

构造函数是特殊的成员函数,主要任务不是开空间创建对象,而是初始化对象

函数名与类名相同;

无返回值;

对象实例化时编译器自动调用对应的构造函数。

构造函数可以重载;

如果类中没有显示定义构造函数,则c++编译器会自动生成一个无参的默认构造函数,

无参的构造函数、全缺省的构造函数、编译器默认生成的构造函数都叫做默认构造函数,并且默认构造函数只能有一个

编译器生成的默认构造函数,会对内置类型变量初始化为随机值,会对自定义类型成员调用它的默认成员函数。



析构函数:

与构造函数相反,他的主要任务是完成类的一些资源清理工作。

特性:

析构函数名是在类名前面加字符~;

无参数无返回值。

一个类有且只有一个析构函数,若未显示定义,编译器会自动生成默认的。

对象生命周期结束时,c++编译系统会自动调用析构函数。

编译器生成的析构函数会对自定义类型成员调用它的析构函数。





拷贝构造函数:

只有单个形参,该形参是对本类类型对象的引用(一般用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。


特性:

拷贝函数是构造函数的一个重载形式,构造函数传参传递的是变量,拷贝构造函数传递的是对象。

拷贝构造函数的参数只有一个,且必须使用引用传参,使用传值方式传参会引发无穷递归调用。

若未显示定义构造函数,系统生成默认的构造函数,默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这叫做浅拷贝。

浅拷贝会造成析构函数2次释放同一块地址。



赋值运算符重载

运算符重载:

c++为了增加代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数。

函数名字为:operator后面直接加需要重载的运算符符号。

函数原型:返回值类型 operator操作符(参数列表)

注意:重载操作符必须有一个类类型或者枚举类型d的操作数

用于内置类型的操作符,其含义不能改变。

作为类成员的重载函数时,其形参看起来比操作数目少1,是因为成员函数操作符有一个默认的形参this,限定为第一个形参。(就是说调用类成员函数时,会隐藏一个this指针,指向调用者)。

注意:.*     ::    sizeof    ?:      .这5个运算符不能重载。


赋值运算符重载:

返回值用引用返回;

返回的为*this

如果没有显示定义,编译器会生成一个,完成对象按照字节序拷贝。










c++只要是自定义类型,如果想要使用运算符,都得去重载运算符。


猜你喜欢

转载自blog.51cto.com/15085121/2667863