Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 4 вопроса http://www.cyberforum.ru/cpp/thread309351.html
Здравствуйте, ответьте пожалуйста кто знает на 4 вопроса пожалуйста: 1)что означает в паскале with d do begin ----- и как заменить эту команду на С 2)что означает reset(f); -------- и как...
C++ Практические задания из собеседований Предлагаю в данной теме выкладывать интересные и не очень практические задачи, которые попадаются на собеседованиях. Я начну: 1. Написать функцию, определяющую является ли заданное число степенью... http://www.cyberforum.ru/cpp/thread308978.html
C++ прога при компиляции ругаеться на "unit1.h"
вся проблема в том,что у меня єтого файла нет,так как прога с нета качаная.можно ли его как нить востановить?? #include <vcl.h> #pragma hdrstop #include «Unit1.h» // – #pragma package...
не работают условия кроме sravnenie[i].kozer==1 && sravnenie[j].kozer==1 C++
int sravnenie_kart_v_massive_sravnenie(KARTA *kart,KARTA *sravnenie,int *nsravnenie,int *sravnenie11,int *sravnenie12,int *fsravnenie) {int n,i,j,f1=0,f2=0; n=0; for(i=*sravnenie11;i<9 &&...
C++ Вывод текста через pokeb http://www.cyberforum.ru/cpp/thread306454.html
Доброго времени суток. Столкнулся с проблемой при использование функции pokeb, выводит символы из таблицы асхи #include <conio.h> #include <string.h> #include <iostream.h> #include <ctype.h>...
C++ вопрос по winsoc WSAStartup(MAKEWORD(2,0), &wsaData); builder ругается на &wsaData, что делать? подробнее

Показать сообщение отдельно
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442

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

31.05.2011, 20:32. Просмотров 883. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru