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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
sledge
0 / 0 / 0
Регистрация: 27.07.2009
Сообщений: 13
#1

Перегрузка [] - C++

09.08.2009, 17:19. Просмотров 1771. Ответов 1
Метки нет (Все метки)

Здравствуйте все, снова.

C++
1
2
char operator[](const unsigned short  i )const ;
char & operator[](const unsigned short  i ) ;
Пишу
C++
1
2
3
MyStrClass str("test")
cout<<str[0];
str[0]='b';
Как компилятор определяет когда и какой оператор[] использовать?
Есть какое-то соглашение?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2009, 17:19     Перегрузка []
Посмотрите здесь:

Перегрузка * - C++
Есть такой класс: class CMatrix{ valarray&lt;valarray&lt;double&gt; &gt; matrix; public: CMatrix operator* (const CMatrix &amp;M); }; ...

перегрузка [] - C++
Как перегрузить operator так, чтобы когда я модифицировал массив то вызывалась простая версия, а когда просто выводил то const версия? ...

Перегрузка + - C++
#include &lt;iostream&gt; using namespace std; class loc { int n , m; public: loc() {} loc( int lg , lt) { n = lg; m =...

перегрузка [] - C++
Здравствуйте! код из учебного пособия. (возможно немного не рабочий) текст перед кодом- &quot;Пусть класс определен как строка символов....

Перегрузка в c++ - C++
Зачем нужно использовать перегрузку в c++? Этот вопрос будет у меня на экзамене, поэтому хочу услышать ваши версии

Перегрузка ++ и -- - C++
У меня было задание: Напишите программу работы со временем, в которой используются перегруженные операции ++ и --, которые работают в...

Перегрузка - C++
Дали задачу, на перегрузку строк вот один из операторов который надо перегрузить. stringg&amp; operator+=( stringg a) { char...

Перегрузка - C++
Класс - множество set. Дополнительно перегрузить следующие операции: -- удалить элемент из множества (типа set-item); * - пересечение...

Перегрузка [][] - C++
Возможно ли для данного класса обеспечить перегрузку жвойных скобок с тем, чтобы в программе можно было использовать выражения типа: ...

Перегрузка - C++
Написать программу на языке C++, реализующию перегруженную функцию z_cnt, получа- ющую в качестве аргумента или массив целых чисел, или...

перегрузка [] - C++
доброго времени суток.. суть задачи такова: есть класс матриц, матрица хранится в виде одномерного массива.. я перегрузил &lt;&lt; и += ...

Перегрузка new - C++
Дайте примеры на перегрузку. #define n ... // Некая целая константа class a { ... }; // Некий класс a *p=new a; // Здесь должен быть...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
09.08.2009, 17:52     Перегрузка [] #2
вот правильные прототипы оператора:
C++
1
2
3
4
5
6
char &operator[](const size_t index) {
  return data[index];
}
const char &operator[](const size_t index) const {
  return data[index];
}
Цитата Сообщение от sledge Посмотреть сообщение
Как компилятор определяет когда и какой оператор[] использовать?
Есть какое-то соглашение?
C++ Primer, Fourth Edition
Providing Read and Write Access
One complication in defining the subscript operator is that we want it to do the right thing when used as either the left- or right-hand operand of an assignment. To appear on the left-hand side, it must yield an lvalue, which we can achieve by specifying the return type as a reference. As long as subscript returns a reference, it can be used on either side of an assignment.

It is also a good idea to be able to subscript const and nonconst objects. When applied to a const object, the return should be a const reference so that it is not usable as the target of an assignment.

Best Practises: Ordinarily, a class that defines subscript needs to define two versions: one that is a nonconst member and returns a reference and one that is a const member and returns a const reference.
Ответ Создать тему
Опции темы

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