条款33:避免遮掩继承而来的名称

/***********************************
//derived classes内的名称会遮掩base classes内的名称,示例:
class Base
{
public:
virtual void mf1() = 0;
virtual void mf1(int x);
virtual void mf2();
...
}
class Derived : public Base
{
public:
virtual void mf1();
..
}
Derived de;
de.mf1(); //正确
de.mf1(1); //错误, Base中的这个方法被遮掩


//可以采用using声明式, 有些老编译器不支持using声明式
class Derived : public Base
{
public:
using Base::mf1;
virtual void mf1();
..
}


//或者采用转交函数(forwarding functions)
class Derived : public Base
{
public:
virtual void mf1() //转交函数
{
Base::mf1(); //暗自成为inline
}
...
}
************************************/

猜你喜欢

转载自blog.csdn.net/u010731020/article/details/81033621