0

私は単純な C++ の問題を抱えていますが、これを解決する方法がわかりません。

とにかく継承されていないAとBの2つのクラスがあります。AはClientクラス、BはClientのリストを格納するクラス(Aクラス)です。

B のみがクラス B をインスタンス化して破棄するようにしたいのですが、コードの他の部分はクラス A 内のメソッドを呼び出せるようにしたいと考えています。

最初に私は以下を持っていました:

class B {
public:
    class A {
        public:
            void setX(int val);
            int getX();
        private:
            int x;
            A();
            ~A();
    };

    B()
    ~B()
    ....
};

これにより、B から A のコンストラクタ/デストラクタを呼び出すことができ、A のコンストラクタ/デストラクタを残りの部分から非公開にできますが、A で setX() と getX() を呼び出すと、B::A を呼び出さなければならないので面倒になりました。

他のクラスがAのメソッドを呼び出すことができるため、Aを独自のファイル(ネストされていない独自のクラス)に入れることを考えましたが、プライベートであるため、BはAのコンストラクター/デストラクタにアクセスできません。公開すると、誰でもクラス A のオブジェクトを作成できます。

これを行う最善の方法が何であるかわかりません。A が独自のクラスである場合、他のクラスが A からオブジェクトに対して setX() および getX() を呼び出すことができる一方で、コンストラクター/デストラクタを B のみが使用できるようにするにはどうすればよいですか?

4

2 に答える 2

2

独自のネストされていないクラスで A を宣言しますが、 B のフレンド クラスを使用すると、うまくいくはずです。

フレンドクラス

あなたに残します:

class B{
public:
    B()
    ~B()
    ....
};

class A {
    friend class B;
    public:
        void setX(int val);
        int getX();
    private:
        int x;
        A();
        ~A();
};
于 2013-05-29T20:50:02.387 に答える