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");
    }
  • 相关阅读:
    ES6-11学习笔记--正则表达式的扩展
    ES6-11学习笔记--字符串的扩展
    ES6-11学习笔记--Map
    ES6-11学习笔记--Set
    ES6-11学习笔记--Symbol
    final
    MySQL
    爬虫1
    laravel
    HTML学习
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5640982.html
Copyright © 2011-2022 走看看