15.5.3 作用域与成员函数
基类和派生类中使用同一名字的成员函数,其行为与数据成员一样:在派生类作用域中派生类成员将屏蔽基类成员。即使函数原型不同,基类成员也会被屏蔽。
struct Base {
void memfcn() {
cout << "Base : memfcn" << endl;
}
};
struct Derived : Base {
void memfcn(int i) {
cout << "Derived : memfcn" << endl;
}
};
Derived d;
d.memfcn(); // error!
d.memfcn(1); // ok
d.Base::memfcn(); //ok
如果派生类想通过自身类型使用所有的重载版本,则派生类必须要么重定义所有重载版本,要么一个也不重定义。
派生类不用重定义所继承的每一个基类版本,它可以为重载成员提供using声明,一个using声明只能指定一个名字,不能指定形参表。
struct Derived : Base {
using Base::memfcn;
void memfcn(int i) {
cout << "Derived : memfcn" << endl;
}
};
Derived d;
d.memfcn(); //ok
d.memfcn(10); //ok