-1

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

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?

4

2 回答 2

0

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

Function 是 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;
}
于 2012-11-05T08:48:21.280 回答
0

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

void function()
{
Derived objectDerived;
int d[objectDerived.a][objectDerived.b];
[stuff]
}
于 2016-03-24T18:53:30.437 回答