C++ 中基类成员函数的隐藏机制

在C++类的继承中,声明在内层作用域(派生类)的函数并不会重载声明在外层作用域(基类)的函数。因此,定义在派生类中的函数也不会重载基类中的成员。如果派生类和基类中的某个成员重名,则派生类将在其作用域内隐藏该基类成员即使派生类成员列表和基类成员列表不一致,基类成员也依然被隐藏。

struct Base {
	int f1();
};

struct Child : Base {
	int f1(int a);  // 隐藏基类的f1()
};

// 调用
Base b; Child c;
b.f1();   // 正确:访问Base中的成员
c.f1(10);   // 正确:访问Child中的成员
c.f1();   // 错误:参数列表为空的f1被隐藏了,无法访问
c.Base::f1();   // 正确:访问Base中的f1

被掩藏掉的成员无法直接访问,可以通过指定作用域进行访问


版权声明:本文为readyone原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。