多继承多态

来源:互联网 发布:淘宝店铺怎么制作店招 编辑:程序博客网 时间:2024/04/30 16:33
#include "iostream"using namespace std;/*C++中没有接口的概念C++中可以使用纯虚函数实现接口接口类中只有函数原型定义,没有任何数据的定义。*/class Interface1{public:virtual void print() = 0;virtual int add(int a, int b) = 0;};class Interface2{public:    virtual void print() = 0;virtual int add(int a, int b) = 0;virtual int minus(int a, int b) = 0;};class parent{public:int a;};class Child : public parent, public Interface1, public Interface2{public:  void print()//在子类中实现{cout<<"Child::print"<<endl;}int add(int a, int b){return a + b;}int minus(int a, int b){return a - b;}};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");}
构造函数不能声明为虚函数的原因是:
1 构造一个对象的时候,必须知道对象的实际类型,而虚函数行为是在运行期间确定实际类型的。而在构造一个对象时,由于对象还未构造成功。编译器无法知道对象 的实际类型,是该类本身,还是该类的一个派生类,或是更深层次的派生类。无法确定。。。

2 虚函数的执行依赖于虚函数表。而虚函数表在构造函数中进行初始化工作,即初始化vptr,让他指向正确的虚函数表。而在构造对象期间,虚函数表还没有被初 始化,将无法进行。

虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时候,这个对象的动态类型还不完整,没有办法确定它到底是什么类型,故构造函数不能动态绑定。(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?)
请谈谈你对多态的理解:

多态的实现效果

多态:同样的调用语句有多种不同的表现形态;

多态实现的三个条件

        有继承、有virtual重写、有父类指针(引用)指向子类对象。

多态的C++实现

  virtual关键字,告诉编译器这个函数要支持多态;不是根据指针类型判断如何调用;而是要根据指针所指向的实际对象类型来判断如何调用
多态的理论基础

   动态联编PK静态联编。根据实际的对象类型来判断重写函数的调用。

多态的重要意义

   设计模式的基础是框架的基石。

实现多态的理论基础

  函数指针做函数参数

C函数指针是C++至高无上的荣耀。C函数指针一般有两种用法(正、反)。



原创粉丝点击