开发者

How do you make a private member in the base class become a public member in the child class?

Consider the following code:


class Base
{
    void f() { }
};

class Derived: public Base
{
public:

};

What can you change in the derived class, such that you can perform the following:


Derive开发者_StackOverflowd d;
d.f();

If the member is declared as public in the base class, adding a using declaration for Base::f in the derived class public section would've fix the problem. But if it is declared as private in the base class, this doesn't seem to work.


This is not possible. A using declaration can't name a private base class member. Not even if there are other overloaded functions with the same name that aren't private.

The only way could be to make the derived class a friend:

class Derived;

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

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

Since you make the names public in the derived class anyway so derived classes of Derived will be able to access them, you could make them protected in the base-class too and omit the friend declaration.


You cannot access a private member from the derived class. What you can do is make it protected, and use a using declaration:

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜