Перегрузка оператора
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Перегрузка оператора Expand / Collapse
Автор
Сообщение
26.11.2006 18:08
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Подскажите пожалуйста, способ перегрузки операторов >= и <=  в следующей строке

if ( ob.str[i] >= '0'  && ob.str[i] <= '9' )

Мой вариант не перегружает:

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;

}

Сообщ. #908007
26.11.2006 22:07
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577, Visits: 17 092
Вы зря описываете объект tmp, который к тому же даже не инициализируете. Левый операнд определяемого вами оператора это объект, на который указывает this, а обращаясь к полям этого объекта this можно даже не указывать. Например, вместо this.str[i] можно просто писать str[i].

P.S. В вашем коде я не разобрался. Скорее всего он имеет смысловые ошибки.

Сообщ. #908018
26.11.2006 23:12
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Постараюсь подробнее объяснить содержание кода.

Есть строка типа string str[SZ], описанная в классе и имеющая размер SZ. Строка может сожержать буквенные и цифровые символы.

В цикле

for (int i = 0; int < SZ; i++)

            if ( str[i] >= '0' && str[i] <= '9')

                   ...

Определяется, какой символ, буквенный или цифровой.

Пример приведён для цифровых символов строки

Сообщ. #908020
27.11.2006 16:41


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.06.2007 20:05
Сообщ.: 279, Visits: 3 001
Есть строка типа string str[SZ], описанная в классе и имеющая размер SZ. Строка может сожержать буквенные и цифровые символы.

Очевидно вы имели ввиду не str[SZ], а переменную типа string с максимальной длиной в SZ. Это разные вещи. В данном случае вы определили не одну стпроку а кучу (array of strings) размером SZ (т.е SZ строк).

В вашем случае вам надо определить просто string str ; и задать ему какое то значение. А затем уже можно получить список букв в  этой строке через обращение к str.c_str[i].

Сообщ. #908060
27.11.2006 17:05
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577, Visits: 17 092
Очевидно, вы имели ввиду не string str[SZ] а char str[SZ] Ведь вам нужно, чтобы str[i] имел тип char, иначе его нельзя будет сравнить с константой '0'.
Сообщ. #908062
27.11.2006 17:42
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Прошу прощения за ошибочность своего высказывания.

В классе определяется std::string str[SZ] , где SZ это максимальный размер массива str.

Если, как вы предлагаете, описать в классе не std::string str[SZ], а просто std::string str, то ошибок, указывающих на выше приведённую строку, компиллятор не выдаёт.

Сообщ. #908066
27.11.2006 17:54
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.01.2007 9:50
Сообщ.: 14, Visits: 65
Выбор такого подхода обусловлен следующим:

В функции, члене этого класса, у меня появляется перечисление

enum digit { A = 1, B, ..., Z};

    digit array[] = {A, ..., Z};

Строка, как я уже сказал, может содержать и цифры и буквы, поэтому, когда необходимо выяснить, какая буква в массиве str, я написал:

в цикле

 

if ( str[i] == array[j] ) // поиск буквы из

                          //массива str

                         // в массиве array

И вот в этом самом месте получаю сообщение об ошибке (перегрузка оператора operator[]()).

Правилен ли мой выбор такого подхода?

Сообщ. #908068
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 2:50