Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
(80 / 20 || 50 / 50) = x
1599 / 1083 / 417
Регистрация: 16.08.2014
Сообщений: 4,536
Записей в блоге: 1
1

Вызов operator[] через operator[] const

12.01.2017, 16:31. Просмотров 777. Ответов 5
Метки нет (Все метки)

Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как сейчас есть?

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
#include <iostream>
 
class Integer
{
public:
    const int& operator[](unsigned int i) const
    {
        std::cout << "const int& Integer::operator[](unsigned int) const"
            << std::endl;
 
        // return p[i];
        return const_cast<Integer&>(*this)[i];
    }
    int& operator[](unsigned int i)
    {
        std::cout << "int& Integer::operator[](unsigned int)"
            << std::endl;
 
        // return const_cast<int&>(static_cast<const Integer&>(*this)[i] );
        return p[i];
    }
 
private:
    int* p;
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2017, 16:31
Ответы с готовыми решениями:

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Реализация operator + через operator +=
внутри следующей темы возник вопрос, ответ на который так и не был получен:...

Operator[] и const map
Привет всем! Что за фигня? Оператор доступа по индексу не работает с константной мапой!...

5
Грамотный. Безпорно.
16788 / 9684 / 1869
Регистрация: 27.09.2012
Сообщений: 24,035
Записей в блоге: 2
12.01.2017, 16:38 2
_stanislav, при изменении придется делать правку в двух местах, а не в одном.
0
Форумчанин
Эксперт CЭксперт С++
8159 / 5007 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
12.01.2017, 16:42 3
Вы хотите узнать чем каст лучше дублирования кода? Тогда ответ выше.
Если чем лучше добавление const нежели отбрасывание - это следует из простой логики. Лучше временно ограничить объект, чем дать ему права, на которые он не имеет права.
0
(80 / 20 || 50 / 50) = x
1599 / 1083 / 417
Регистрация: 16.08.2014
Сообщений: 4,536
Записей в блоге: 1
18.01.2017, 22:54  [ТС] 4
Цитата Сообщение от MrGluck Посмотреть сообщение
Лучше временно ограничить объект, чем дать ему права, на которые он не имеет права.
Но даем же права тоже временно.

Добавлено через 7 минут
MrGluck, Croessmah, по большему счету же разницы никакой нет, просто не за комментированный вариант проще в написании.
0
129 / 101 / 58
Регистрация: 26.10.2013
Сообщений: 306
20.01.2017, 14:11 5
_stanislav, подскажите книгу, пожалуйста
0
(80 / 20 || 50 / 50) = x
1599 / 1083 / 417
Регистрация: 16.08.2014
Сообщений: 4,536
Записей в блоге: 1
21.01.2017, 00:51  [ТС] 6
stzer, "Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ". {вырезано}
конкретней {вырезано}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2017, 00:51

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

error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+'
Что означает ошибка в 8 строчке error: invalid operands of types 'const int*' and 'const int*' to...

Class & operator's |Error: undefined reference to operator
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to...

Operator +, operator += — какой через какой реализовывать?
Для class Fraction { // ... public: Fraction operator + ( const Fraction&amp; right ) const;...

Перегрузка operator>> и operator<< в абстрактном классе
Здрасьте! Есть необходимость перегрузить потоки, Я знаю как это сделать через friend, но вот...


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

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

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