令人迷惑的隐藏(C++高手请进),分不够可以加
各位大虾:
我是一名C++初学者,在学习C++的知识中碰到了一个令我不解的问题,请各位高手不吝赐教.
问题:C++中关于重载与覆盖的规则如下:
重载
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有 virtual 关键字。
现在有以下代码:
#include <iostream.h>
class Base
{
public:
virtual void f(float x){ cout << "Base::f(float) " << x << endl; }
void g(float x){ cout << "Base::g(float) " << x << endl; }
void h(float x){ cout << "Base::h(float) " << x << endl; }
};
class Derived : public Base
{
public:
virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
void g(int x){ cout << "Derived::g(int) " << x << endl; }
void h(float x){ cout << "Derived::h(float) " << x << endl; }
};
void main(void)
{
Derived d;
Base *pb = &d;
Derived *pd = &d;
pb->g(3.14f); // Base::g(float) 3.14
pd->g(3.14f); // Derived::g(int) 3
}
调用结果是:
pb->g(3.14f); // Base::g(float) 3.14
pd->g(3.14f); // Derived::g(int) 3
我的问题是是:
对于函数g()到底是属于什么?(覆盖?重载?还是什么...)
这显然不是覆盖(因为覆盖必须满足:函数名相同,参数类型的个数相同),这里显然也不能说是重载,因为重载是相同的范围(在同一个类中);
如果说是:派生类继承了基类的函数,并于派生类中重载了此函数,但这应该不会引起继承来的那个函数被隐藏啊.
在下百思不得其解,请各位发表看法和高见.在线等待.
QQ:52372937