Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
3 / 3 / 1
Регистрация: 02.03.2013
Сообщений: 231

Константные методы

19.08.2020, 09:04. Показов 6975. Ответов 20

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Потихоньку изучаю С++. Разобрался в идее константных методов?! Они нужны для того, чтобы константный объект мог эти методы вызывать?
Но тогда почему работает такой код?

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyClass
{
    int* arr;
public:
    MyClass() : arr{ new int[8] } {}
    ~MyClass() { delete[] arr; }
 
    int* get() const { return arr; }
};
 
int main()
{
 
    MyClass m;
 
    int* arr = m.get();
    arr[0] = 11;
 
}


почему метод get мб константным? Вернув указатель, я могу разыменовывать его, и тем самым изменить состояние объекта? Почему такой код компилируется?
Такой код у меня не компилируется.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
       MyClass const const_m;
 
    int* const_arr = const_m.get();
    const_m[0] = 11;


К чему я всё это веду? Ковыряя умные указатели, я обнаружил что метод get() класса std::unique_ptr константный. Зачем это было сделано? В чём смысл?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2020, 09:04
Ответы с готовыми решениями:

Константные поля и методы
А можете объяснить, что такое константные поля и методы в классах?

Константные методы и объекты класса
Это необходимость, или явная подстраховка того, что бы объект (константный) работал с себе подобными методами класса ?

Дублирование кода и константные методы
Есть метод method возвращающий ссылку на внутреннее значение объекта. Существует в двух вариантах - константный и обычный. Константная...

20
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
19.08.2020, 11:29
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от schoolboy_ Посмотреть сообщение
вы предлагает сделать так?
 int* get()  { return arr; }
 int* get() const {return arr;}
он предлагает делать вот так:

C++
1
2
  int* get() noexcept { return arr; }
  const int* get() const noexcept{return arr;}
Цитата Сообщение от schoolboy_ Посмотреть сообщение
Но идея константности теряется, потому что я могу менять состояние массива.
константный метод обещает, что не изменит логического состояния объекта.
соответственно, если массив представляет собой это состояние (или его часть),
можно просто вернуть указатель на неизменяемые данные.
C++
1
const int* get() const noexcept{return arr;}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2020, 11:29

Константные методы в абстрактных классах
Добрый день! Помогите, пожалуйста, разобраться с константными методами в абстрактных классах. Вот пример рабочего кода. Здесь...

Константные и неконстантные методы в классе
Здравствуйте! Вот задача https://stepik.org/lesson/563/step/6?unit=886 Я наверное не очень понимаю смысл задачи потому что моя...

Константные и не константные ссылки. Приведения типов. Нужно уточнение
Не очень понимаю в чем различие (2,3 строчки). int x = 10; double &y = x; const double &y = x; Почему для не...

Константные объекты
#include <iostream> #include <windows.h> using namespace std; class CTest { public: int A,B; CTest(int Aval,int...

Константные функции
Почему все работает? class My { public: My(); int retFunc() const; private: bool isRet = false; };


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru