zoukankan      html  css  js  c++  java
  • C++ 抽象类二(抽象类的基本语法)

    //抽象类的基本语法
    #include<iostream>
    using namespace std;
    
    /*
    有关多继承的说明
    被实际开发经验抛弃的多继承
    工程开发中真正意义上的多继承是几乎不被使用的
    多重继承带来的代码复杂性远多于其带来的便利
    多重继承对代码维护性上的影响是灾难性的
    在设计方法上,任何多继承都可以用单继承代替
    
    绝大多数面向对象语言都不支持多继承
    绝大多数面向对象语言都支持接口的概念
    C++中没有接口的概念
    C++中可以使用纯虚函数实现接口
    接口类中只有函数原型定义,没有任何数据的定义。
    
    总结:C++中的模拟接口类定义3大条件
          1.只有public访问权限(因为必须要求子类重写父类纯虚函数)
          2.只能定义函数原型,不提供实现
          3.不能定义任何成员属性
    
          C++中的模拟接口类特点
          1.不可以定义接口类对象
          2.可以定义接口类的指针和引用
          3.接口类中必须是纯虚函数,不能是虚函数
    
          纯虚函数与虚函数的区别
          纯虚函数:virtual void Print() = 0;
          虚函数:virtual void Print(){cout<<"我是普通的虚函数"<<endl;}
          纯虚函数没有函数实现,虚函数有函数实现
    
    
    
    
    实际工程经验证明
    多重继承接口不会带来二义性和复杂性等问题
    多重继承可以通过精心设计用单继承和接口来代替
    接口类只是一个功能说明,而不是功能实现。
    子类需要根据功能说明定义功能实现。
    
    */
    
    class Point{
    public:
        virtual void Print() = 0;
    };
    
    class PointA:public Point{
        virtual void Print(){
            cout << "我是子类  我重写了父类的纯虚函数" << endl;
        }
    };
    
    void ProtectB(){
        //Point p1;   报错  error C2259 : “Point” : 不能实例化抽象类
        Point *p1 = NULL;
        PointA pa;
        p1 = &pa;
        //产生多态
        p1->Print();
    }
    
    void main(){
        ProtectB();
        system("pause");
    }
  • 相关阅读:
    机器学习基础1--线性回归
    联想RD350板载RAID110i,安装CentOS 7 不识别RAID设备
    CentOS 7磁盘寻找不到,卡在sulogin,造成的开机失败问题--Error getting authority...
    gitlab同步插件gitlab-mirrors报错<已解决,未找到原因>
    马哥Linux SysAdmin学习笔记(四)
    马哥Linux SysAdmin学习笔记(三)
    马哥Linux SysAdmin学习笔记(二)
    马哥Linux SysAdmin学习笔记(一)
    php-round()四舍六入
    Linux权限问题(2)-unzip引发的权限问题
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5640982.html
Copyright © 2011-2022 走看看