C++ 抽象类二(抽象类的基本语法)

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
}

 

以上是关于C++ 抽象类二(抽象类的基本语法)的主要内容,如果未能解决你的问题,请参考以下文章

011-面向对象进阶(final关键字,抽象类,接口)

用于 C++ 抽象语法树组合和代码生成的库 [关闭]

Java语法包 继承 多态 抽象类 接口

C++ 中的抽象语法树表示

类C++

类C++