C++中成员函数间的各种关系比较复杂,之前介绍过重载和虚函数覆盖,今天再梳理另一种容易让人迷惑的机制--函数隐藏。先看两个例子:
例1.成员函数public继承
class Base{
public:
void fun1(int a){ cout << "Base::fun1(int a)" << endl; }
};
class Drv: public Base {
public:
void fun2(int a) { cout << "Drv::fun2(int a)" << endl; }
};
void main()
{
Drv dr;
dr.fun1(1); //继承自基类,输出Base::fun1(int a)
dr.fun2(2); //派生类自定义,输出Drv::fun2(int a)
}
关于public/protected/private继承及接口/实现继承后文讨论,上例是为说明public继承后,派生类Drv可直接调用基类Base的成员函数,换句话基类普通成员函数(非virtual)在public派生类中默认可见。再看:
例2成员函数同名:
class Base
{
public:
void fun1(int a){ cout<<"Base fun1(int a)"<<endl; } //①