zoukankan      html  css  js  c++  java
  • 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;        //多态

      

    欢迎各位指点!
  • 相关阅读:
    CF763C Timofey and Remoduling
    CF762E Radio Stations
    CF762D Maximum Path
    CF763B Timofey and Rectangles
    URAL1696 Salary for Robots
    uva10884 Persephone
    LA4273 Post Offices
    SCU3037 Painting the Balls
    poj3375 Network Connection
    Golang zip压缩文件读写操作
  • 原文地址:https://www.cnblogs.com/thors/p/14334464.html
Copyright © 2011-2022 走看看