Ссылка на объект C++ в классах
Мне интересно, как сохранить ссылку на объект внутри другого объекта, а также установить эту ссылку в качестве частного свойства. Пример (псевдокод):
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 внутри этого класса bar. Я знаю, как просто перенести его в метод и использовать только в рамках этого метода, но здесь я хочу установить его как частное свойство. Как бы я поступил так?
3 ответа
Так же, как вы определяете и используете любой член класса.
Убедитесь, что вы инициализируете ссылочный элемент с помощью _member-initializer, а не просто присваиваете ему значение after-the-fact в теле конструктора; Напомним, что ссылки должны быть инициализированы и не могут быть позже восстановлены.
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);
bar::bar( foo & reference )
{
fooreference = reference;
}
fooreference
это просто еще один объект. Назначая, вы делаете копию ссылки. Обратите внимание, что fooreference
не псевдоним reference
,
Вы не можете переустановить ссылку, поэтому вы должны установить ее в списке инициализатора.
struct Foo {};
struct Bar {
Bar(Foo &foo_) : foo(foo_) {}
void set(Foo &foo_) { foo = foo_; } // copies, doesn't reseat
Foo &foo;
};