基类同名函数隐藏:
class A
{
public:
f(){cout<<"ff";}
};
class B:public A
{
public:
f(int i){cout<<"ffaa";}
};
int main()
{
A a;
a.f{};//无法调用该函数;
//注意:在调用中,我们将派生类看作内部作用域而将基类看作外部作用域,所以在派生类内部与基类重名的函数,基类函数会被覆盖;
a.f(3);
如何取消这样的隐藏
class B:public A
{
public:
f(int i){cout<<"ffaa";}
using A::f;
};
重定义函数:
class A
{
public:
void test(){ return "test";}
};
class B:public A
{
public:
void test(){return "redefine";}
//注意 在派生类中重新定义了test 函数 这样利用隐藏特性可以使得优先调用修改后的test函数
在部分情况下,test函数可能需要调用派生类中的部分内容,所以可以知道这样做可以使得test实现这样的操作
};