C++ 虚函数的使用

这两天看了C++虚函数的相关机制,有必要记录下自己的心得体会。
   C++的虚函数机制主要依赖C++的指针和引用的静态类型(编译时确定的类型)和动态类型(运行时确定的类型)的不同来实现动态绑定的,也就是在运行时来确定基类指针和引用的类型,是本身基类类型还是其某个子类类型。这样,就可以在动态时确定通过指针或者引用调用的是基类或者子类的虚函数。注意要实现动态绑定函数需两个条件(1) 必须使用基类指针或者引用,C++不允许把基类赋给子类,基类指针可以指向基类及其子类对象,也必须用指针或者应用,否则其类型在编译是就确定了。 (2) 要动态绑定的函数必须是虚函数,只有虚函数才能引发动态绑定。
   下面说说C++虚函数的实现,每个含有虚函数的类在实例化时,编译器都会为其建立一个虚函数表,同时由vpointer指向这个虚函数表。在这个表中存储了这个类所有的虚函数地址。而当子类继承父类时,也会继承这个虚函数表(一个新的表)以及一个新的vpointer值,如果子类对父类继承的虚函数有修改,那么也会将会把自己的虚函数地址改为新的虚函数地址。这样,基类指针和引用在得到子类指针或者引用时,其基类的虚函数表指针指向的是子类的虚函数表执政,在实现动态绑定时,就能动态调用到子类的虚函数了。
C++ <wbr>虚函数的使用

  那么在多重继承的时候又是怎样呢?子类实例为每一个父类维护一个虚函数表指针和一个虚函数表,即如果子类有两个父类,那么子类实例中就含有vpointer1,vpointer2两个虚函数表指针。而这个虚函数表的维护与单继承时相同。任意父类指针或者引用,都可以通过相应子类中的虚函数表指针调用子类的虚函数。
C++ <wbr>虚函数的使用

  再说说C++引进虚函数机制的目的吧。主要是实现多态性,即使用的是基类指针实现的统一代码,根据用户传入参数的不同,展现出不同的特性。这里参数的不同在于是基类指针还是子类指针,用户传入基类指针时调用的是基类的虚函数,传入子类指针时使用的是子类的虚函数,自然会表现出不同的特性了。这就是所谓的多态性以及泛型编程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值