C++ 基础语法&特性(3)-面向对象之特殊成员

 

C++相关文章

 

先介绍一下类的构造、析构等一系列函数:

   构造和析构调用顺序为:

    基类(父类)构造函数、成员类构造、本类构造(基类构造与继承顺序有关、成员类构造与定义顺序有关)

    本类析构、被包含类析构、基类析构函数

class 类名{
    /*
        友元
            不属于类的成员,为了兼容C才加的,超出访问权限的控制
            友元是单向的、不可传递,开放出去的权限可继承(下一篇会解释) 
    */ 
    friend 返回值类型 函数名A(参数表);     //外部函数A可直接访问本类私有成员 
    friend 返回值类型 类A::类A成员函数(参数表);
    friend class 类名;    //该类所有函数均可访问本类私有成员 
    /*
        构造函数 (无须返回值) 
    */
    类名([参数表]){
        this->成员变量    //this指本类对象的指针  
        //无参的为默认构造函数, 若未定义任何构造函数,则由编译器自动生成 
        //亦可以在类外定义 类名::类名([形参表]) 
        //若定义有参构造函数,则默认的无参构造函数会被隐藏,new 类名()会报错 
    } 
    类名([参数表]):成员1(参数),指针成员2(new 类型){
        //初始化列表,可在方法声明时对成员初始化
        //初始化顺序与声明顺序有关,与初始化列表顺序无关 
        //(基类构造)、成员对象、常量成员、引用型成员,必须通过初始化列表  
    }
    
    /*
        类型转换构造函数 
    */
    类名(一个形参){
        //若只有一个参数的构造函数,则此参数类型变量可赋值给对象 
        //    类名 对象名=5 
    } 
    
    /*
        复制构造函数,有2种 一般使用const版即可 
        若封闭类/派生类的对象通过默认复制构造函数初始化,则成员对象/基类也使用复制构造函数初始化(自定义需自己写) 
        注意:此函数也为构造函数,若定义则会隐藏默认构造函数 
        只有1个参数:本类对象的[常]引用 
        调用时机:
            1. 用一个对象初始化另一个对象,类名 对象2(对象1)  或 类名 对象2=对象1
            2.作为函数的形参或返回值 
            已声明对象重新赋值则不会调用此方法(会调用重载运算符函数) 
    */
    类名(const 类名 &);
    类名(类名 &被复制对象名){
        //此时this指向新对象 
    };
    
    /*
        析构函数
    */
    ~类名(){
        //若未定义,编译器自动生成,最多1个、不可重载
        //调用时机,普通对象由编译器自动回收,new 对象为delete时调用 
    } 
    
};

 

posted @ 2021-01-27 09:57  寻觅~~  阅读(40)  评论(0编辑  收藏  举报