2

私は以下のいくつかのコードを持っています:

class base{
private:
    base();
    int x;
public:
    friend class child;
};
class child{
public:
    void display(base* b)
    {
        b->x = 1;
    }

};
int main()
{
    base* t;
    //t = new base;
    child c;
    c.display(t);
}

オブジェクトを割り当てることができませんt。の値をテストしたいと思いますx。このコードをテストするにはどうすればよいですか?

4

2 に答える 2

4

通常、クラスのパブリックAPIのみをテストします。
したがって、の値をテストする必要がある場合、xその値は他のクラスにも関連している可能性があります。childアクセスする友達として宣言xしたという事実は、その事実を裏付けています。

結論:
公開xするか、(より良い)ゲッターメソッドと場合によってはセッターメソッドを提供します。

于 2013-02-20T10:41:35.897 に答える
1

このコードをパブリックセクションの基本クラスに追加します。

friend int main();

次に、main関数で、次の行のコメントを解除します。

t=new base;

ただし、基本クラスのコンストラクターをプライベートではなくパブリックにすることをお勧めします。また、なぜ基本クラスのコンストラクターをプライベートにしたのか、本当に興味があります。

于 2013-02-20T10:47:05.220 に答える