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

时间:2010-03-28 15:10:28

标签: c++ inheritance

请考虑以下代码:


class Base
{
    void f() { }
};

class Derived: public Base
{
public:

};

您可以在派生类中更改哪些内容,以便执行以下操作:


Derived d;
d.f();

如果成员在基类中声明为public,则在派生类public section中为Base :: f添加using声明将解决问题。但是如果在基类中声明它是私有的,那么这似乎不起作用。

2 个答案:

答案 0 :(得分:5)

这是不可能的。 using声明不能命名私有基类成员。即使存在其他非私有的具有相同名称的重载函数也是如此。

唯一的方法是让派生类成为朋友:

class Derived;

class Base
{
    void f() { }
    friend class Derived;
};

class Derived: public Base
{
public:
    using Base::f;
};

由于您在派生类中将名称设为公共,因此Derived的派生类将能够访问它们,您也可以在基类中创建它们protected并省略{{ 1}}声明。

答案 1 :(得分:1)

您无法从派生类访问私有成员。你可以做的是保护它,并使用using声明:

class Base
{
protected:
    void f() { }
};

class Derived: public Base
{
public:
    using Base::f;
};