请考虑以下代码:
class Base
{
void f() { }
};
class Derived: public Base
{
public:
};
您可以在派生类中更改哪些内容,以便执行以下操作:
Derived d;
d.f();
如果成员在基类中声明为public,则在派生类public section中为Base :: f添加using声明将解决问题。但是如果在基类中声明它是私有的,那么这似乎不起作用。
答案 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;
};