C++ 基础语法&特性(5)-面向对象之多态和虚函数

 

C++相关文章

多态,是指同样的事物,有不同的状态

  C++的多态有两种

  1、编译时多态

    函数和运算符重载,是静态多态

  2、运行时多态

     对象指针赋值兼容情况下,根据对象实际类型调用函数,而不是根据变量类型(普通成员函数是通过指针类型判断)

  3、虚函数

class 多态类基类名{    //包含虚函数的类称为多态类 
    public:
        //静态函数不能为虚函数(静态函数与对象无关,与类有关) 
        //友元函数不能为虚函数(友元本就不是成员) 
        
        //尽量不要声明为inline 
        virtual 返回值类型 方法名V(参数表){
            //virtual只在声明时用,定义时不写 
            //派生类即使重写,也是虚函数
        } 
};

/*
    [virtual] 虚基类
    多重继承+多层继承下,对间接基类访问具有二义性
    A
    B C(B/C虚继承A)
    D (D同时继承B、C时访问A不会出错) 
*/
class 派生类名 : [virtual] 继承方式说明符 多态类基类名 {
    public:
     virtual 返回值类型 方法名V(参数表){
            //无论是否有virtual都是虚函数
        }
    /*
        抽象类/函数
         虚函数,≈抽象函数,派生类必须重写此函数
         纯虚函数的类称为抽象类(无法实例化,可以有此类型指针) 
    */
    virtual 返回值类型 函数名(参数表)=0; 
    
        返回值类型 方法名T(){
            //函数里可调用虚函数,依然具有多态性 
        } 
        
        //重载操作符函数不建议虚函数(容易混乱)
        
        
        /*
            构造函数和析构函数里 尽量别调用虚函数,对象不完整,不具有多态性
        */
        类名();        //构造函数不能定义为虚函数
        virtual ~类名();    //基类的析构函数建议定义为虚函数,可以根据对象实际类型调用析构函数 
};

//区分:使用基类指针或引用调用虚函数(其他情况不算多态)
子类类型 变量1;            
基类类型 变量2;    //不算,通过对象调用虚函数,类型已确定,编译器预绑定
基类类型 &变量3=变量1;    //此时调用虚函数是多态
基类类型 *变量4;        //多态

 

 

  

posted @ 2021-01-27 13:19  寻觅~~  阅读(70)  评论(0编辑  收藏  举报