Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
1

Для поля объекта запретить запись, но оставить чтение

31.05.2011, 20:32. Просмотров 1155. Ответов 3
Метки нет (Все метки)

Традиционное оформление объектов заключается в том, что поля-значения помещаются в private класса, а получение значений или модификация производятся через функции-интерфейсы. Если поля представляют сложную структуру, то относительные затраты на вызовы функций достаточно малы. Для простых данных типа int, очевидно, сам вызов функции будет на порядок дороже простого копирования.

Обойти использование функций можно было бы путем использования ссылок с модификатором const.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class A
{ private:
    int b;
  public:
    A(int i);
    const int *bb;
};
 
A::A(int i)
{ bb=&b;
  b=i;
}
 
int main(int argc, char *argv[], char *env[])
{ system("clear");
 
  A V(123);
  std::cout<<*(V.bb)<<std::endl;
  // *(V.bb)=234; // Присваивание не комплируется, это хорошо.
 
  int Error;
  V.bb=&Error; // А вот такая зараза возможна!
 
  return 0;
}
но здесь остаётся проблема с возможностью изменения самого указателя.

Вопрос - можно ли это решить. Попытки использования const указателей или ссылок, приводят к тому, что этот указатель нельзя инициализировать в конструкторе.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2011, 20:32
Ответы с готовыми решениями:

Как Можно Запретить Репликацию Но Оставить Печать И Клиборд Для Бд
Доброе время суток Поставлена задача для решения: Имеется БД с 100.000 иерархическими...

Запись и чтение объекта в файл
у меня есть класс A,как мне записать в файл несколько объектов этого класса а потом их считать?

Запись и чтение объекта класса в файл и из файла
У меня есть std::list состоящий из объектов типа Person это база о людях. Нужно реализовать два...

Чтение запись в разные поля union
Добрый вечер, union Foo { int a; float b; }; int main() {

3
Freelance
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
31.05.2011, 21:23 2
Вроде так
C++
1
2
3
4
5
6
7
8
9
10
11
12
class A
{ private:
    int b;
  public:
    A(int i);
    const int * const bb;
};
 
A::A(int i) : bb(&i)
{
  b=i;
}
1
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
31.05.2011, 22:08  [ТС] 3
Цитата Сообщение от asics Посмотреть сообщение
: bb(&i)
Спасибо, работает. Решена проблема, над которой я плющил моск, наверное, год. Теперь хочу найти описание инициализации полей в классе. В моих книжках, чето такого нет.

И вот ещё подумалось, а существуют языки, в которых кроме private и public, есть разделы или синтаксис, который прямо указывает на разрешение записи и чтения полей данных. Т.е. такое описание, которое указывает на возможность использования поля класса в операторах присваивания слева и/или справа.

Добавлено через 15 минут
Чёрт, даже неловко, что я так тупил. Теперь можно вообще упростить тот быдлокод до использования ссылок вместо указателей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A
{ private:
    int b;
  public:
    A(int i) : bb(b), b(i) {}
    const int &bb;
};
 
int main(int argc, char *argv[], char *env[])
{ system("clear");
 
  A V(1234);
  std::cout<<V.bb<<std::endl; //Чтение возможно
  //V.bb=666; // Ура! Невозможно!
 
  return 0;
}
0
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
31.05.2011, 22:52 4
Цитата Сообщение от skvor Посмотреть сообщение
И вот ещё подумалось, а существуют языки, в которых кроме private и public, есть разделы или синтаксис, который прямо указывает на разрешение записи и чтения полей данных. Т.е. такое описание, которое указывает на возможность использования поля класса в операторах присваивания слева и/или справа.
Это называется "свойства"(property). Подобное есть в С#, Delphi.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2011, 22:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как оставить стили hover для объекта после клика на элемент
Есть несколько картинок, при клике на которых определенные данные записываются в input. &lt;script&gt; ...

Аборты: оставить или запретить
во первых данная процедура вредит организму женщины (думаю, общеизвестно) во вторых население...

Аборты: оставить или запретить (2)
Продолжение темы https://www.cyberforum.ru/relationships/thread556544.html.

Алкоголь и табак... оставить или запретить
очередная тема моей убойной серии... у меня их много... итак, суть вопроса понятна (думаю)......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.