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

    xiaoxiao2023-10-05  141

    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{})取地址重载函数一般不用重载,编译器会默认生成,除非想让别人获取到指定内容需要重载

    最新回复(0)