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;        //多态

      

    欢迎各位指点!
  • 相关阅读:
    作用域和内存问题
    Javascript事件
    JavaScript学习总结(三)
    Javascript学习总结(二)
    JavaScript学习总结(一)
    vue开发搭建 1、 npm安装+vue脚手架安装 2、cnpm安装
    20181008
    RabbitMQ在.NetCore中的基础应用
    微软CRM 基于 ADFS自定义多重身份验证
    如何在ASP.NET Core中上传超大文件
  • 原文地址:https://www.cnblogs.com/thors/p/14334464.html
Copyright © 2011-2022 走看看