分享

C++虚函数的问题

 昵称11200860 2012-11-28
今天些程序的时候遇到了一个奇怪的现象,都是怪自己以前没有注意过,或者说没有深入分析过,很容易出错的东东。特意记下来,防止以后出错。
class A
{
public:
       virtual void init() { }
       void another() { init() ;}
};

class B:public A
{
      void init() { A::init(); }
};

class C:public A
{
      void init() { A::another(); }
};

int main()
{
      B b;
      C c;
      b.init(); //没有问题
      c.init();//这里会导致死循环
}

这里在b和c中都是用父类调用的方法,但是b没有问题,但是c出问题了。
究其原因,b中没有问题是因为直接用A::init()去调用的,init是A中的方法,自然可以使用。而c中使用A::another()的时候,another()是A中的方法,但是another()中调用的init()因为是虚函数,就调用到了C中本身的init(),这样反复调用,最终导致死循环。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多