2012-05-17 4 views
0

C++ Как и если у меня есть некоторые классы, какКак сделать ссылку на объект с

class B { 
public: 
    int a; 
}; 

class C { 
    B reference; 
} 

B Test; 
C Test2; 

C.reference = Test; 

B.a = 2; 

И теперь я должен был бы получить 2 также от C.reference.a

+5

Я думаю, что ответ на ваш вопрос: использовать ссылку на B в классе C (B & вместо B), но вам нужно инициализировать его в конструкторе – lezebulon

ответ

1
class C { 
public: 
    C(B & ref) 
     :reference(ref) 
    {} 

    B & reference; 
}; 

B Test; 
C Test2(Test); 

Примечание что если у вас есть опорный элемент, компилятор не будет генерировать оператор присваивания для вас, так что вы не можете сделать это:

B b1, b2; 
C c1(b1), c2(b2); 
c1 = c2; // can't do this 

вы можете в сотрудничестве urse по-прежнему предоставляют свои собственные. Если вы хотите переназначить ссылку, вы можете использовать указатель, и вы, вероятно, должны сделать его закрытым и использовать accessor для чтения и изменения данных.

+0

. Вы должны объяснить ловушки ссылочных элементов. –

2

Как это:

class C { 
public: 
    B& reference; // notice use of '&' to denote a reference 

    C(B& ref) : reference(ref) 
    { 
    } 
}; 

И было бы использовать так:

C Test2 = C(Test); 
+0

вы должны объяснить подводные камни ссылок. –