2

オブジェクトの参照を別のオブジェクトの内部に格納し、その参照をプライベートプロパティとして設定する方法を考えています。例(擬似コード):

class foo
{
    public:
        int size;
        foo( int );
};

foo::foo( int s ) : size( s ) {}

class bar
{
    public:
        bar( foo& );
    private:
        foo fooreference;
};

bar::bar( foo & reference )
{
    fooreference = reference;
}

foo firstclass( 1 );
bar secondclass( firstclass );

ご覧のとおり、このバークラス内にfooの参照を格納できるようにしたいと思います。単純にメソッドに取り込み、そのメソッドのスコープ内で使用する方法を知っていますが、ここではプライベートプロパティとして設定したいと思います。どうすればこれを行うことができますか?

4

3 に答える 3

2

クラスメンバーを定義して使用するのと同じ方法です

コンストラクター本体で事後に参照メンバーを割り当てるのではなく、必ず_member-initialiserを使用して参照メンバーを初期化してください。参照は初期化する必要があり、後でリバウンドすることはできないことを思い出してください。

class foo
{
    public:
        int size;
        foo( int );
};

foo::foo( int s ) : size( s ) {}

class bar
{
    public:
        bar(foo&);
    private:
        foo& fooreference;
};

bar::bar(foo& reference) : fooreference(reference)
{}

foo firstclass(1);
bar secondclass(firstclass);
于 2011-09-16T20:05:42.233 に答える
1
bar::bar( foo & reference )
{
    fooreference = reference;
}

fooreference単なる別のオブジェクトです。割り当てることにより、参照のコピーを作成します。fooreferenceのエイリアスではないことに注意してくださいreference

于 2011-09-16T20:09:29.397 に答える
1

参照を再設定することはできないため、初期化子リストで設定する必要があります。

struct Foo {};

struct Bar {
  Bar(Foo &foo_) : foo(foo_) {}
  void set(Foo &foo_) { foo = foo_; } // copies, doesn't reseat
  Foo &foo;
};
于 2011-09-16T20:08:08.560 に答える