多态

多态含义

  不同的对象收到相同的消息做出了不同的反应,比如让动物叫,小猫发出喵喵,小狗发出汪汪。

  多态性的实现和联编有关。其中在运行之前就完成的联编称为静态联编,而在程序运行时才完成的联编叫动态联编。

  静态联编是系统在编译时就决定如何实现某一动作,效率高,但是要求编译时就知道函数的全部信息,并且不够灵活。而动态联编是系统在运行时动态实现某一动作,更灵活。

  静态多态性是通过函数重载和模板实现的。

  动态多态性是通过虚函数来实现的。   

虚函数

  虚函数是函数重载的另一种表现形式。

  为什么需要引入虚函数?

  基类的对象指针可以指向它的公有派生的对象,但是当它指向公有派生对象时,它只能访问派生类中从基类继承来的成员,而不能访问公有派生类中定义的成员。

  如果在基类中定义了虚函数,virtual会指示编译器,在运行时确定所要调用的函数。

 

  虚函数与重载函数的关系:

  虚函数是函数重载的另一种形式:在派生类中重新定义基类的虚函数。

  普通函数重载时,要求函数的参数或者参数类型必须有所不同,函数的返回类型可以不同;但是重载一个虚函数时候,要求函数名、返回类型、参数个数、参数的类型和顺序与基类中的虚函数原型完全相同。

纯虚函数和抽象类

  在基类中说明的一个虚函数,在基类中没有具体的定义,没有函数体,但要求在它的派生类中根据需要对它进行定义。

  一个类中有一个虚函数,那么称这个类为抽象类,只能作为其他类的基类,不能建立抽象类对象。

虚基类

  一个类有多个直接基类,这些直接基类有一个共同的基类,某个成员通过多条派生类继承时,希望只产生一个派生类。

  虚基类可以解决二义性的问题

posted @ 2020-05-11 16:56  天凉好个秋秋  阅读(165)  评论(0编辑  收藏  举报