派生类的朋友可以访问哪些变量?

时间:2012-11-05 08:37:32

标签: c++ class friend derived

为了简化我的问题,我有这样的事情:

class Base {

private:

protected:
    int a,b;
    string c;

public:
    [some functions here]

}

class Derived : public Base{

    [some variables and functions]

friend void function();

}

void function(){

int d[a][b];
[stuff]

}

基本上,我的void函数需要访问基类的受保护类中的东西。我想保留受保护部分中定义的那些变量。无论如何还有功能,它可以被派到Derived类,能够访问a和b吗?

2 个答案:

答案 0 :(得分:0)

您可以在Derived中定义私有方法:Derived中的任何方法都可以访问Base的受保护成员。

函数是Derived的朋友,因此它可以在Derived中调用那些私有方法,Derived又访问Base的受保护成员。


编辑以回复以下评论

get_a()成员方法和a成员数据是其类的成员。这些成员的实例存在于其类的实例中。除了实例之外,它们不存在,因此要访问它们,您需要通过类的实例访问它们。

例如,像这样:

class Derived : public Base{

    [some variables and functions]

    friend void function(Derived& derived);
};

void function(Derived& derived)
{
     int a = derived.get_a();
     int b = derived.get_b();
     // I don't know but even the following might work
     int c = derived.a; // able to access field of friend's base class.
}

void test()
{
    Derived* derived = new Derived();
    function(*derived);
    delete derived;
}

答案 1 :(得分:0)

您的函数需要通过类的实例访问a和b,如下所示

void function()
{
Derived objectDerived;
int d[objectDerived.a][objectDerived.b];
[stuff]
}