C++中的抽象类(接口和协议)

来源:互联网 发布:mac系统word 编辑:程序博客网 时间:2024/06/05 22:39

有关多继承的说明

被实际开发经验抛弃的多继承

工程开发中真正意义上的多继承是几乎不被使用的

多重继承带来的代码复杂性远多于其带来的便利

多重继承对代码维护性上的影响是灾难性的

在设计方法上,任何多继承都可以用单继承代替

多继承的麻烦:多继承中的二义性

C++中是否有Java中的接口概念?

绝大多数面向对象语言都不支持多继承

绝大多数面向对象语言都支持接口的概念

C++中没有接口的概念

C++中可以使用纯虚函数实现接口

接口类中只有函数原型定义,没有任何数据的定义。

class Interface{public:virtual void func1() = 0;virtual void func2(int i) = 0;virtual void func3(int i) = 0; };

实际工程经验证明

多重继承接口不会带来二义性和复杂性等问题

多重继承可以通过精心设计用单继承和接口来代替

接口类只是一个功能说明,而不是功能实现。

子类需要根据功能说明定义功能实现。

#include "iostream"using namespace std;/*C++中没有接口的概念C++中可以使用纯虚函数实现接口接口类中只有函数原型定义,没有任何数据的定义。*/class Interface1{public:virtual void print() = 0;virtual int add(int i, int j) = 0;};class Interface2{public:virtual int add(int i, int j) = 0;virtual int minus(int i, int j) = 0;};class parent{public:int i;};class Child : public parent, public Interface1, public Interface2{  public:  void print(){cout<<"Child::print"<<endl;}int add(int i, int j){return i + j;}int minus(int i, int j){return i - j;}};int main(){Child c;c.print();cout<<c.add(3, 5)<<endl;cout<<c.minus(4, 6)<<endl;        Interface1* i1 = &c;Interface2* i2 = &c;cout<<i1->add(7, 8)<<endl;cout<<i2->add(7, 8)<<endl;system("pause");        return 0;}







0 0