Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать ссыслку read only, Как сделать ссыслку read only 
:(
    Опции темы
astranom
Дата 8.10.2004, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 нельзя, потому что в других частях программы тоже такие ссылки и там = должно работать.


PM MAIL   Вверх
Vyacheslav
Дата 8.10.2004, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Код

class Class1
{
public:
  int i;
};

class Class2
{
public:
Class1 * const ref;
Class2::Class2():ref(new Class1){}
};



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
astranom
Дата 8.10.2004, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.10.2004

Репутация: нет
Всего: нет



Не совсем подходит в Class2 есть функции члены, которые содержат подобный код:
void Class2::fn1(void)
{
....
delete ref;
....
ref = new class1;
....
};
PM MAIL   Вверх
Vyacheslav
Дата 8.10.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



И что?
Код

   delete ref;
   const_cast<Class1*>(ref)= new Class1;

Ну а вообще то это неправильно. В таких случаях лучше использовать геттеры


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
astranom
Дата 8.10.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.10.2004

Репутация: нет
Всего: нет



Спасибо всем за помощь.
Кажется я нашел нормальное решение, оказывается допустима такая запись:


Class2 cl2;
int k=cl2.GetRef()->i;

Правда при этом автокомлит не работает, по крайне мере в Билдере.

Это сообщение отредактировал(а) astranom - 8.10.2004, 13:42
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.