-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関数は、基本クラスの保護されたクラスにあるものにアクセスする必要があります。これらの変数を保護されたセクションで定義したままにしておきたいです。とにかく、派生クラスにフレンドリングされている関数が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 に答える