![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| astranom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 8.10.2004 Репутация: нет Всего: нет |
Есть два класса Class1 и Class2, одним из элементов Class2 является ссылка на объект Class1.
class Class1 { public: int i; }; class Class2 { public: Class2 *ref; Class2() { ref=new Class1; }; }; Как сделать эту ссыслу не доступной для изменения и при этом иметь возможность быстро ссылаться на эелементы объектов? Если описать ref как protected, то нельзя будет использовать такую запись Class2 cl2; int k = cl2.ref->i; а делать метод GetRef и всегда использовать дополнительную переменную кажется довольно неудобно Class2 cl2; Class1 *temp; temp=cl2.GetRef(); int k = temp->i; Перегрузить оператор = для ссылок на объекты типа Class1 нельзя, потому что в других частях программы тоже такие ссылки и там = должно работать. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| astranom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 8.10.2004 Репутация: нет Всего: нет |
Не совсем подходит в Class2 есть функции члены, которые содержат подобный код:
void Class2::fn1(void) { .... delete ref; .... ref = new class1; .... }; |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
И что?
Ну а вообще то это неправильно. В таких случаях лучше использовать геттеры -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| astranom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 8.10.2004 Репутация: нет Всего: нет |
Спасибо всем за помощь.
Кажется я нашел нормальное решение, оказывается допустима такая запись: Class2 cl2; int k=cl2.GetRef()->i; Правда при этом автокомлит не работает, по крайне мере в Билдере. Это сообщение отредактировал(а) astranom - 8.10.2004, 13:42 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |