|
|
|
Junior 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; }
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577,
Visits: 17 092
|
|
| Вы зря описываете объект tmp, который к тому же даже не инициализируете. Левый операнд определяемого вами оператора это объект, на который указывает this, а обращаясь к полям этого объекта this можно даже не указывать. Например, вместо this.str[i] можно просто писать str[i]. P.S. В вашем коде я не разобрался. Скорее всего он имеет смысловые ошибки.
|
|
|
|
|
Junior 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') ... Определяется, какой символ, буквенный или цифровой. Пример приведён для цифровых символов строки
|
|
|
|
|
Supreme 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].
|
|
|
|
|
Supreme Being
      
участник
Last Login: 23.08.2008 19:49
Сообщ.: 1 577,
Visits: 17 092
|
|
| Очевидно, вы имели ввиду не string str[SZ] а char str[SZ] Ведь вам нужно, чтобы str[i] имел тип char, иначе его нельзя будет сравнить с константой '0'.
|
|
|
|
|
Junior Member
      
участник
Last Login: 02.01.2007 9:50
Сообщ.: 14,
Visits: 65
|
|
| Прошу прощения за ошибочность своего высказывания. В классе определяется std::string str[SZ] , где SZ это максимальный размер массива str. Если, как вы предлагаете, описать в классе не std::string str[SZ], а просто std::string str, то ошибок, указывающих на выше приведённую строку, компиллятор не выдаёт.
|
|
|
|
|
Junior 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[]()). Правилен ли мой выбор такого подхода?
|
|
|
|