如何使基类中的私有成员成为子类中的公共成员?

jas*_*ine 2 c++ inheritance

请考虑以下代码:


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声明将解决问题.但是如果它在基类中被声明为私有,那么这似乎不起作用.

Joh*_*itb 5

这是不可能的.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声明.