0

メイン関数からクラス関数へのアクセスを制限するには?

ここに私のコード。

class Bar
{
public: void doSomething(){}
};

class Foo
{
public: Bar bar;
//Only this scope that bar object was declared(In this case only Foo class)
//Can access doSomething() by bar object.
};

int main()
{
    Foo foo;
    foo.bar.doSomething(); //doSomething() should be limited(can't access)
    return 0;
}

PS. 下手な英語で申し訳ありません。


編集:古いコードは削除しませんでしたが、新しいコードで拡張しました。この場合、フレンドクラスは使えないと思います。クラスごとに使う予定なので。ありがとう

class Bar
{
public:
    void A() {} //Can access in scope that object of Bar was declared only
    void B() {}
    void C() {}
};

class Foo
{
public:
    Bar bar;
    //Only this scope that bar object was declared(In this case is a Foo class)
    //Foo class can access A function by bar object

    //main function need to access bar object with B, C function
    //but main function don't need to access A function
    void CallA()
    {
        bar.A(); //Correct
    }
};

int main()
{
    Foo foo;
    foo.bar.A(); //Incorrect: A function should be limited(can't access)    
    foo.bar.B(); //Correct
    foo.bar.C(); //Correct
    foo.CallA(); //Correct
    return 0;
}
4

3 に答える 3

4

Fooの友達を作るBar

class Bar
{
    friend class Foo;
private:
    void doSomething(){}
};

また、メンバー変数を作成しないでくださいpublicsetters/getters代わりに使用

于 2012-08-15T13:49:52.787 に答える
1

内部をBar bar非公開にFooすることでうまくいきますよね?その後、クラスのみFooが使用できますbar

于 2012-08-15T13:53:25.673 に答える
1

Foo を Bar のフレンド クラスとして定義し、doSomething() を非公開にすることができます。

于 2012-08-15T13:50:25.610 に答える