Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как сделать ссыслку read only


Автор: astranom 8.10.2004, 11:39
Есть два класса 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 8.10.2004, 11:52
Код

class Class1
{
public:
  int i;
};

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

Автор: astranom 8.10.2004, 12:11
Не совсем подходит в Class2 есть функции члены, которые содержат подобный код:
void Class2::fn1(void)
{
....
delete ref;
....
ref = new class1;
....
};

Автор: Vyacheslav 8.10.2004, 13:23
И что?
Код

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

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

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


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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)