C++多态

       多态是一种运行期绑定机制,通过这种机制,实现将函数名绑定到函数具体实现代码的目的。 一个函数在内存当中起始的地址就称为这个函数的入口地址

      多态就是将函数名称动态地绑定到函数入口地址的运行期绑定机制。

     

C++中的运行期绑定编译期绑定

一个函数的名称与其入口地址是紧密相连的,入口地址是函数在内存当中的起始地址。

#include  <iostream>

usingnamespace std;

void sayHi();

int main() {

  sayHi();

  return 0;

}

void sayHi() {

  cout<<“Hello,wonderful world!”<<endl;

}

编译期绑定是函数需要执行的代码由编译器在编译阶段确定了的。也就是说将某个函数名和其入口地址进行绑定在一起。

运行期绑定是直到程序运行之时(不是在编译时刻),才将函数名称绑定到其入口地址。

 如果对一个函数的绑定发生在运行时刻而非编译时刻,我们就称该函数是多态的。


注意的几点:

ü  基类中被声明了为虚函数的成员函数,在被继承以后的派生类当中即使不被显式的声明为虚函数,它也自动地被认为是虚函数。
ü  虚函数在类声明之外定义,关键字virtual仅在函数声明是需要,不需在函数定义中使用virtual关键字。
ü  C++仅允许将成员函数定义为虚函数,顶层函数不能为虚函数


虚成员函数继承

  和普通成员函数一样,在派生类中虚成员函数也可以从基类继承。

运行期绑定和虚成员函数表

     C++是使用vtable(虚成员函数表)来实现虚成员函数的运行期绑定。

   使用动态绑定的程序会影响效率,因为虚成员函数需要额外的存储空间,而且对虚成员函数表进行查询也需要额外的时间。



重载

重载函数和虚函数的区别在于前者是编译期绑定的,后者是运行期绑定


 抽象基类和纯虚成员函数

  抽象基类不能被实例化,其可以用来指明某些必须被派生类覆盖的虚函数,这样就可以让一些类具有共同的接口,它们都是继承于某个抽象基类的。

class  Abstract

{

pulbic:

  virtual void open()  =  0;

};

定义纯虚成员函数的限制

 只有虚函数才可以成为纯虚成员函数,非虚函数或顶层函数都不能声明为纯虚成员函数。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值