派生类是否继承基类的虚函数?

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:38:54
定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数.
如果派生类没有重定义某个虚函数,则使用基类中定义的版本.
----<C++ Primer> 4th edtion中文版

那么派生类到底继不继承基类中的虚函数,或者用别的新术语?

如果派生类又重新实现了这个虚函数,那么,这叫“覆盖”
如果不重新实现,才是“继承”

8.2 成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概
念,否则错误将防不胜防。
8.2.1 重载与覆盖
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
示例8-2-1 中,函数Base::f(int)与Base::f(float)相互重载,而Base::g(void)
被Derived::g(void)覆盖。
#include <iostream.h>
class Base
{
public:
void f(int x){ cout << "Base::f(int) " << x << endl; }
void f(float x){ cout << "Base::f(float) " << x << endl; }
virtual void g(void){ cout << "Base::g(void)" << endl;}
};
class Derived : public Base
{
public:
virtual void g(void){ cout << "Derived::g(void)" << endl;}
};
void main(void)
{
Derived d;
Base *