请考虑以下代码:
class Base
{
void f() { }
};
class Derived: public Base
{
public:
};
Run Code Online (Sandbox Code Playgroud)
您可以在派生类中更改什么,以便您可以执行以下操作:
Derived d;
d.f();
Run Code Online (Sandbox Code Playgroud)
如果成员在基类中声明为public,则在派生类public section中为Base :: f添加using声明将解决问题.但是如果它在基类中被声明为私有,那么这似乎不起作用.
这是不可能的.using声明不能命名私有基类成员.即使存在其他非私有的具有相同名称的重载函数也是如此.
唯一的方法是使派生类成为朋友:
class Derived;
class Base
{
void f() { }
friend class Derived;
};
class Derived: public Base
{
public:
using Base::f;
};
Run Code Online (Sandbox Code Playgroud)
既然您在派生类Derived中将名称设为public,那么派生类将能够访问它们,您也可以protected在基类中创建它们并省略friend声明.
| 归档时间: |
|
| 查看次数: |
2180 次 |
| 最近记录: |