题:
哪个子类的虚函数重新声明是正确的?【中国台湾某著名杀毒软件公司2004年面试题】
A. Base* Base::copy(Base*); B. Base* Base::copy(Base*);
Base* Derived::copy(Derived*); Derived* Derived::copy(Base*);
C. ostream& Base::print(int, ostream&=cout); D. void Base::eval() const;
ostream& Derived::print(int, ostream); void Derived::eval();
解析:本问题是哪个派生类的虚函数再声明是对的。
A是重载(因为参数不一样了);B会导致编译错误(返回值变了);C是真正的多态(返回值,参数完全一样);D是重载(const放在函数后面表示是另一个函数了,如果放在返回值或者参数列表里面还是一样的函数)。
答案C。