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

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

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

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

26.11.2006, 21:08. Просмотров 3233. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2006, 21:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора (C++):

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

Перегрузка оператора - C++
Привет, форумчане. Есть простой класс, в котором перегружается оператор '==' : #ifndef POINT_H #define POINT_H class point{ ...

Перегрузка оператора = - C++
Есть некий класс. И два класса-наследника. Надо перегрузить оператор =, к тому же в дочерних классах вызывать перегрузку в базовом классе....

перегрузка оператора - C++
Как перегрузить оператор , чтобы его можно было использовать для операций присваивания новых значений определённого члена массива? покажите...

Перегрузка оператора - C++
Здравствуйте.Появился вопрос: есть две переменные float **m,**m1 как перегрузить оператор = в данном случае?(имею ввиду только первую...

перегрузка оператора - C++
Помогите,пожалуйста! у меня есть класс Gruppa, куда входят студенты (фамилия,номер группы,успеваемость,номер зачетки) подскажите как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
palva
2609 / 1831 / 262
Регистрация: 08.06.2007
Сообщений: 6,989
Записей в блоге: 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
2609 / 1831 / 262
Регистрация: 08.06.2007
Сообщений: 6,989
Записей в блоге: 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, то ошибок, указывающих на выше приведённую строку, компиллятор не выдаёт.
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[]()).
Правилен ли мой выбор такого подхода?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2006, 20:54
Привет! Вот еще темы с ответами:

Перегрузка оператора [] - C++
Проблема в том, что надо обязательно использовать вид obj, а не obj.arr. Иначе всё работает) #include&lt;iostream&gt; using namespace std; ...

Перегрузка оператора * - C++
Здрасте. Есть задача: Реализовать класс Matrix размерностью NxN, в которой хранятся числа типа float. Память под элементы выделять...

Перегрузка оператора ++ - C++
Что делает оператор ++ при его перегрузке?

Перегрузка оператора = - C++
Нужно перегрузить оператор так что бы в начале строки и в конце были квадратные скобки . Все почти работает только вот вывод на экран не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2006, 20:54
Ответ Создать тему
Опции темы

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