关于c++派生类中虚函数的问题

如何判断派生类中这个函数是否是虚函数?
书上说,对基类有覆盖定义的就是虚函数,无论是否用virtual定义。但书上又说,判定覆盖的依据是两者都是虚函数,发生在派生类与基类之间。 我被搞懵了诶。如果派生类中没有用virtual定义函数,如何判断他是不是虚函数?

一旦一个函数被声明为虚函数,那么他从该点之后的继承层次结构中都是虚函数,不管它在有没有再次声明是不是虚函数,有些程序员为了提高程序的清晰度,在继承结构中喜欢再次明确的声明这些虚函数.

至于“判定覆盖的依据是两者都是虚函数,发生在派生类与基类之间。”只是解释了什么是覆盖,派生类将基类中的虚函数重写即为覆盖。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-07
虚函数必须要在基类用virtual修饰才能为虚函数,派生类若重定义该函数,则无论是否有virtual关键字都是虚函数。你要判断派生类中没有用virtual定义的函数是否为虚函数,则可以:在该函数标志特定的输出,如cout<<"Virtual Function!";然后定义一个基类的指针bP,指向新new的派生类对象,然后用bP调用所需判断的函数,看是否有输出特定的标志Virtual Function!,如果正确输出则说明是虚函数,其他情况则表明该函数不是虚函数。
第2个回答  2010-11-07
比如b是一个派生类,f是b里面一个函数。
先去b的基类里找,如果发现f原来在某个基类中有的,看基类中f是不是虚函数,如果是,那不管b中f有没有virtual都是虚函数。
如果在基类中没有发现f的原型,则就看b中f自己有没有virtual了,有就是,没有就不是。
第3个回答  2010-11-07
如果是虚函数的话,在派生类中重新定义其函数体时,不会导致同名覆盖.当用基类指针指向派生类对象并调用虚函数时,执行的是在派生类中重新定义的虚函数的函数体.
第4个回答  2010-11-07
想用虚函数是:基类、父类都要定义成virtual类型的
相似回答