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

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

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

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

29.12.2012, 07:31. Просмотров 331. Ответов 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-метод, значения самих элементов класса менять не может. Как ему запретить менять данные по указателю?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2012, 07:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Защита данных от изменения в константном методе (C++):

Нужно чтобы введённый студент в методе 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; ...

3
0x10
2548 / 1728 / 264
Регистрация: 24.11.2012
Сообщений: 4,349
29.12.2012, 07:36 #2
Сделать arr указателем на константу. Но, как я понимаю, в других методах изменять данные по указателю все-таки хочется. Поэтому приходит простое решение: пусть arr будет объектом, тогда уже можно будет управлять константностью данных.
0
Schizorb
510 / 462 / 16
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
29.12.2012, 07:42  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
в других методах изменять данные по указателю все-таки хочется
Это само собой.
Цитата Сообщение от 0x10 Посмотреть сообщение
пусть arr будет объектом
Так а внутри того класса, которому будет принадлежать arr, тоже будут const-методы, запросто меняющие его элементы.
0
0x10
2548 / 1728 / 264
Регистрация: 24.11.2012
Сообщений: 4,349
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;   
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2012, 08:01
Привет! Вот еще темы с ответами:

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

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

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

Фиксация даты на изменения другой ячейки, защита данных ячейки от изменений следующим днем - MS Excel
Добрый день, прошу помочь с решением данной задачи. Существует 2 строки, например номер 3 и 10. В строке 10 начиная со столбца Н...


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

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

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