|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.02.2013, 14:07 | #1 |
Пользователь
Регистрация: 29.04.2012
Сообщений: 37
|
Немного не разобрался в перегрузке []
Привет всем!
Спасибо заранее всем! Если Я передаю по ссылке то и возвращать нужно ссылку. Значит в фукции main() сделать присваивание. Подчеркивает return s[k];Мне кажется что-то делаю не так. файл MyString.h Код:
MyString.cpp Код:
|
08.02.2013, 14:08 | #2 | |
Пользователь
Регистрация: 29.04.2012
Сообщений: 37
|
в stdafx.h
Цитата:
|
|
08.02.2013, 14:10 | #3 |
Пользователь
Регистрация: 29.04.2012
Сообщений: 37
|
Извините задачу забыл вылоджить задача такая обратится к массиву к конкретному элементу с помощью перегрузки оператора [] .ну и проверять что- бы не выходи за пределы.
|
08.02.2013, 14:46 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Моя не понял, чего у Вас в operator[] делает cout.
Что печальнее, поскольку метод помечен как константный, то и s имеет тип const char[]. А поскольку Вы возвращаете неконстантную ссылку на элемент массива, компилятор начинает ругаться самыми чёрными словами. С другой стороны, если возвращать константную ссылку, нельзя будет написать myStr[2] = 'a'; Поэтому нужно - так (по-хорошему, надо бы кидать исключение за такие обращения, ну да ладно): Код:
Последний раз редактировалось Abstraction; 08.02.2013 в 14:49. |
08.02.2013, 23:22 | #5 |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
поменяй
char &operator [](int k)const; на char *operator [](int k)const; когда возвращаешь строку, то надо возвращать указатель, так как массив сам по себе и есть указатель |
09.02.2013, 10:59 | #6 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Цитата:
Если у нас есть char* ptr то какой тип возвращается при ptr[123]? Если у нас есть char ptr[123] то какой тип возвращается при ptr[123]? Тем более, что соль не в том, чтоб вернуть строку а символ из строки, при чем так, чтоб можно было использовать и как lvalue |
|
09.02.2013, 15:28 | #7 | |
Пользователь
Регистрация: 02.02.2013
Сообщений: 44
|
Цитата:
char operator[] (int k) const; если нужно вернуть один символ, то возвращаем просто char, зачем возвращать ссылку или указатель? |
|
09.02.2013, 23:33 | #8 | ||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Цитата:
|
||
10.02.2013, 02:35 | #9 |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
sizeof(char) == 1 байт
sizeof(указатель) == 4 байт ссылка это тоже указатель. спрашивается: зачем возвращать ссылку?( только в случае char!!) отсюда: const char operator[] (int k) const; (для rvalue) для lvalue правильнее будет возвращать ссылку, т.к. с ней работать(синтаксически) так же как с символом, а вот с указателем как раз куча проблем и отличий возникает. отсюда: char &operator[] (int k); (для lvalue) два метода полюбому реализовывать придется от этого не уйти |
10.02.2013, 18:06 | #10 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
1) Возвращаем ссылку. В функции - взять адрес начала массива, прибавить требуемое смещение, вернуть адрес (thiscall возвращает результат в eax). В вызывающем коде - обратиться по адресу, прочитав значение в другой регистр. 2) Возвращаем значение. В функции - взять адрес начала массива, прибавить смещение, обратиться по адресу, вернуть значение. В вызывающем коде просто использовать значение. Т.е. проделывается один и тот же набор действий, в общем-то. |
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при перегрузке << и >> | DartDayring | Visual C++ | 8 | 07.12.2020 13:42 |
Завтра экзамен, а я не разобрался с задачей( | Getman | Помощь студентам | 6 | 01.02.2012 20:39 |
С теорией я разобрался незнаю как реализовать | Valerii | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 26.01.2010 15:35 |
MASM: HelloWorld разобрался в коде, поправьте немного | N!ckeL | Помощь студентам | 6 | 25.02.2009 22:03 |