C++纯虚函数的实现

来源:互联网 发布:.net和php哪个好一些 编辑:程序博客网 时间:2024/06/13 13:52

虚函数和纯虚函数是C++的重要特征之一,对于虚函数,在类的vtable里面有一个指针指向其实现,但是纯虚函数又是如何的情况呢?如下面的例子:

#include <stdio.h>#include <iostream>using namespace std;class base{    public:      virtual void show()      {          cout<<"\n  Base class show:"; display();      }      virtual void display() = 0;}; class derive:public base{   public:      void display()      {              cout<<"\n  Derive class display:";      }      void show()      {              cout<<"\n  Derive class show:"; base::show();      }};int main(int argc, char *argv[]){derive *p = new derive;p->show();return 0;}


对于虚函数的show的调用,非常容易理解,但是在derive当中调用base::show(),而在这个函数当中有调用了纯虚函数,其中基类的纯虚函数又是在基类里面不实现的。问题就在于,在基类里面调用纯虚函数会有什么样的结果,是不是一个正确的做法。实验证明上面的程序是没有问题的,基类里面是可以调用它的纯虚函数,上面的程序输出是:

  Derive class show:
  Base class show:
  Derive class display:

所以,对于这个例子的解释,我个人参考相关的资料之后认为是这样的:对于纯虚函数vtable的指针指向其具体实现,所以在基类调用纯虚函数就等于调用了其在子类中的实现。


原创粉丝点击