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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.78
Alex_p
Сообщений: n/a
#1

Перегрузка оператора - C++

26.11.2006, 21:08. Просмотров 3220. Ответов 6
Метки нет (Все метки)

Подскажите пожалуйста, способ перегрузки операторов >= и <= в следующей строке
C++
1
if ( ob.str[i] >= '0'  && ob.str[i] <= '9' )
Мой вариант не перегружает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MyClass
{
             std::string str[SZ];
 public:
    int   operator>= (unsigned char ch)
};
//=================================
int MyClass::operator>=(unsigned char ch)
{
     MyClass tmp;
     for ( int i = 0; i < 10; i++)
          if ( tmp.str[i] >= ch)
                 return 1;
        else
                 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
2506 / 1728 / 229
Регистрация: 08.06.2007
Сообщений: 6,775
Записей в блоге: 4
27.11.2006, 01:07     Перегрузка оператора #2
Вы зря описываете объект tmp, который к тому же даже не инициализируете. Левый операнд определяемого вами оператора это объект, на который указывает this, а обращаясь к полям этого объекта this можно даже не указывать. Например, вместо this.str[i] можно просто писать str[i].
P.S. В вашем коде я не разобрался. Скорее всего он имеет смысловые ошибки.
Alex_p
Сообщений: n/a
27.11.2006, 02:12     Перегрузка оператора #3
Постараюсь подробнее объяснить содержание кода.
Есть строка типа string str[SZ], описанная в классе и имеющая размер SZ. Строка может сожержать буквенные и цифровые символы.
В цикле
C++
1
2
3
for (int i = 0; int < SZ; i++)
            if ( str[i] >= '0' && str[i] <= '9')
                   ...
Определяется, какой символ, буквенный или цифровой.
Пример приведён для цифровых символов строки
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
27.11.2006, 19:41     Перегрузка оператора #4
Есть строка типа <B>string str[SZ]</B>, описанная в классе и имеющая размер <B>SZ</B>. Строка может сожержать буквенные и цифровые символы.
Очевидно вы имели ввиду не str[SZ], а переменную типа string с максимальной длиной в SZ. Это разные вещи. В данном случае вы определили не одну стпроку а кучу (array of strings) размером SZ (т.е SZ строк).
В вашем случае вам надо определить просто string str ; и задать ему какое то значение. А затем уже можно получить список букв в этой строке через обращение к str.c_str[i].
palva
2506 / 1728 / 229
Регистрация: 08.06.2007
Сообщений: 6,775
Записей в блоге: 4
27.11.2006, 20:05     Перегрузка оператора #5
Очевидно, вы имели ввиду не <STRONG>string str[SZ] </STRONG>а <STRONG>char str[SZ]</STRONG> Ведь вам нужно, чтобы str[i] имел тип char, иначе его нельзя будет сравнить с константой '0'.
Alex_p
Сообщений: n/a
27.11.2006, 20:42     Перегрузка оператора #6
Прошу прощения за ошибочность своего высказывания.
В классе определяется std::string str[SZ] , где SZ это максимальный размер массива str.
Если, как вы предлагаете, описать в классе не std::string str[SZ], а просто std::string str, то ошибок, указывающих на выше приведённую строку, компиллятор не выдаёт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2006, 20:54     Перегрузка оператора
Еще ссылки по теме:

C++ Перегрузка оператора []
Перегрузка оператора C++
C++ Перегрузка оператора
Перегрузка оператора C++
C++ Перегрузка оператора +=

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

Или воспользуйтесь поиском по форуму:
Alex_p
Сообщений: n/a
27.11.2006, 20:54     Перегрузка оператора #7
Выбор такого подхода обусловлен следующим:
В функции, члене этого класса, у меня появляется перечисление
enum digit { A = 1, B, ..., Z};
digit array[] = {A, ..., Z};

Строка, как я уже сказал, может содержать и цифры и буквы, поэтому, когда необходимо выяснить, какая буква в массиве str, я написал:
в цикле
C++
1
2
3
if ( str[i] == array[j] ) // поиск буквы из 
                          //массива str
                         // в массиве array
И вот в этом самом месте получаю сообщение об ошибке (перегрузка оператора operator[]()).
Правилен ли мой выбор такого подхода?
Yandex
Объявления
27.11.2006, 20:54     Перегрузка оператора
Ответ Создать тему
Опции темы

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