Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
#1

Защита данных от изменения в константном методе - C++

29.12.2012, 07:31. Просмотров 307. Ответов 3
Метки нет (Все метки)

Допустим,

C++
1
2
3
4
5
6
7
8
9
10
11
class test
{
public:
    void foo() const
    {
        arr = new int[100]; // ошибка
        arr[0] = 100; // все ок, но как сделать ошибку?
    }
private:
    int * arr;
};
вот класс, в нем const-метод, значения самих элементов класса менять не может. Как ему запретить менять данные по указателю?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 07:31     Защита данных от изменения в константном методе
Посмотрите здесь:

Нужно чтобы введённый студент в методе in вывелся на экран как в методе out - C++
#include<conio.h> #include<stdio.h> #include<iostream.h> #include<windows.h> #include<cstring.h> // это просто для русских...

Библиотеки процесса, защита от изменения процесса - C++
Здраствуйте. 1) Как можно получить список библиотек (dll, asi), которые уже загружены в процесс какой-то программы? Мне нужно чекать...

Защита данных программы - C++
Как лучше защитить пароли программы от декомпиляции? Насчет обфускации знаю, а как то проще можно?

защита от некорректных данных в конструкторе - C++
Здравствуйте, вот пишу довольно тривиальный класс о представлении треугольника. Поля класса - углы и стороны. По моему мнению для...

Защита данных в векторе от изменений - C++
Как можно защитить данные помещённые в вектор от дальнейших изменений? Что-то типа vector<const int> name; На этот код компилятор...

Защита от ввода некорректных данных в консольной программе - C++
#include "stdafx.h" #include <iostream> #include <cstdlib> #include <conio.h> #include <cmath> using namespace std; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
29.12.2012, 07:36     Защита данных от изменения в константном методе #2
Сделать arr указателем на константу. Но, как я понимаю, в других методах изменять данные по указателю все-таки хочется. Поэтому приходит простое решение: пусть arr будет объектом, тогда уже можно будет управлять константностью данных.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
29.12.2012, 07:42  [ТС]     Защита данных от изменения в константном методе #3
Цитата Сообщение от 0x10 Посмотреть сообщение
в других методах изменять данные по указателю все-таки хочется
Это само собой.
Цитата Сообщение от 0x10 Посмотреть сообщение
пусть arr будет объектом
Так а внутри того класса, которому будет принадлежать arr, тоже будут const-методы, запросто меняющие его элементы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2012, 08:01     Защита данных от изменения в константном методе
Еще ссылки по теме:

Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса - C++
Вдохновленный соседней темой тоже решил задать свой вопрос таким же начинающим программистам как и я :) Все кто хочет попробовать дать...

Защита от дурака. Ввод данных типа int с клавиатуры. - C++
Данные типа int вводятся с клавиатуры. нужно поставить защиту от дурака. Полазил на форуме нашёл программу: по аналогии пытался...

Изменения типа данных - C++
Прошу помоч, написал програму для сортировки чисел от большего к меншему, заполнение идет вводом пользователем чисел. Только я написал там...

Зачем использовать функции-члены для изменения членов-данных - C++
Вообщем, объяснить вопрос. К примеру имеется класс, в private-свойствах которого имеется x1,y1,x2,y2(Rect), а в public находятся функции...


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

Или воспользуйтесь поиском по форуму:
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
29.12.2012, 08:01     Защита данных от изменения в константном методе #4
Ну... Да, константность всегда можно обойти)
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
26
#include <iostream>
 
class A
{
public:
   A() : n_(10) { }
   
   void Inc() const {
      int& n_ref = const_cast<int&>(n_);
      ++n_ref;
   }
   
   int N() const { return n_; }
 
private:
   const int n_;
};
 
int main()
{
   const A obj;
   std::cout << obj.N() << std::endl;
   obj.Inc();
   std::cout << obj.N() << std::endl;
   return 0;   
}
Yandex
Объявления
29.12.2012, 08:01     Защита данных от изменения в константном методе
Ответ Создать тему
Опции темы

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