c++子父类的函数掩藏和覆盖的区别

c++子父类的函数隐藏和覆盖的区别
在看《高质量c/c++》中看到了函数的隐藏和覆盖是这么说的:

覆盖的是指子类函数覆盖基类函数
在不同的类内(分别位于子类和父类)。
同名同参。
基类的函数名前必须有virtual关键字。
隐藏指派生类的函数隐藏了基类的同名函数
如果派生类函数与基类函数同名,但参数不同,无论基类函数前是否有virtual修饰,基类函数被隐.
如果派生类函数与基类函数同名,参数也相同,但是基类函数前无virtual修饰,基类函数被隐藏。
C/C++ code

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; }
};



Derived::f(float x)函数覆盖了基类Base::f(float x)函数。子父类同名同参,父类有virtual关键字
Derived::g(int x) 函数隐藏了基类Base::g(float x)函数。同名不同参,无论有无virtual修饰
Derived::f(float x)函数隐藏了基类Base::f(float x)函数。同名同参,且基类无virtulal修饰

------解决方案--------------------
我可以给你说说我的理解
我认为隐藏和覆盖的区别主要体现在 多态上
举个例子
[code=C/C++][/code]

#include<iostream>
#include<string>
using namespace std;
class A
{

public :
A(){}
void f(){cout<<'a'<<endl;}
virtual void g(){cout<<"invoke aaa"<<endl;}
};
class B:public A
{
public:
B(){}
virtual void g(){cout<<"invoke bbb"<<endl;}
void f(){cout<<'b'<<endl;}
};

int main()
{
A * a = new B;
A * b = new A;
B * c = new B;
a->f();
b->f();
c->f();
cout<<"-------------------------"<<endl;
a->g();
b->g();
c->g();
}
结果是 

a
b
invoke bbb 
invoke aaa
invoke bbb

我想说的是 如果是隐藏的话 当你通过指针调用这个函数的时候,调用根据的是指针的类型
如果是覆盖的话 当你通过指针调用这个函数的时候,根据的是指针指向的类型

这就是我的理解 希望对你有用