﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / C++  / Перегрузка оператора / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Thu, 20 Nov 2008 01:51:57 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Выбор такого подхода обусловлен следующим:&lt;P&gt;В функции, члене этого класса, у меня появляется перечисление&lt;/P&gt;&lt;P&gt;[b]enum digit { A = 1, B, ..., Z};&lt;/P&gt;&lt;P&gt;    digit array[] = {A, ..., Z};[/b] &lt;P&gt;Строка, как я уже сказал, может содержать и цифры и буквы, поэтому, когда необходимо выяснить, какая буква в массиве str, я написал: &lt;P&gt;в цикле[code] &lt;P&gt;if ( str[i] == array[j] ) // поиск буквы из &lt;P&gt;                          //массива str&lt;P&gt;                         // в массиве array[/code] &lt;P&gt;И вот в этом самом месте получаю сообщение об ошибке (перегрузка оператора [b]operator[]()[/b]).&lt;P&gt;Правилен ли мой выбор такого подхода?</description><pubDate>Mon, 27 Nov 2006 17:54:13 GMT</pubDate><dc:creator>Alex_p</dc:creator></item><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Прошу прощения за ошибочность своего высказывания.&lt;P&gt;В классе определяется [b]std::string str[SZ][/b] , где SZ это максимальный размер массива [b]str[/b].&lt;/P&gt;&lt;P&gt;Если, как вы предлагаете, описать в классе не [b]std::string str[SZ][/b], а просто [b]std::string str[/b], то ошибок, указывающих на выше приведённую строку, компиллятор не выдаёт.</description><pubDate>Mon, 27 Nov 2006 17:42:52 GMT</pubDate><dc:creator>Alex_p</dc:creator></item><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Очевидно, вы имели ввиду не &lt;STRONG&gt;string str[SZ] &lt;/STRONG&gt;а &lt;STRONG&gt;char str[SZ]&lt;/STRONG&gt; Ведь вам нужно, чтобы str[i] имел тип char, иначе его нельзя будет сравнить с константой '0'.</description><pubDate>Mon, 27 Nov 2006 17:05:40 GMT</pubDate><dc:creator>palva</dc:creator></item><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>[quote]Есть строка типа &lt;B&gt;string str[SZ]&lt;/B&gt;, описанная в классе и имеющая размер &lt;B&gt;SZ&lt;/B&gt;. Строка может сожержать буквенные и цифровые символы.[/quote]&lt;/P&gt;&lt;P&gt;Очевидно вы имели ввиду не str[SZ], а переменную типа string с максимальной длиной в SZ. Это разные вещи. В данном случае вы определили не одну стпроку а кучу (array of strings) размером SZ (т.е SZ строк).&lt;/P&gt;&lt;P&gt;В вашем случае вам надо определить просто string str ; и задать ему какое то значение. А затем уже можно получить список букв в  этой строке через обращение к str.c_str[i].</description><pubDate>Mon, 27 Nov 2006 16:41:27 GMT</pubDate><dc:creator>kpoxa</dc:creator></item><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Постараюсь подробнее объяснить содержание кода.&lt;P&gt;Есть строка типа [b]string str[SZ][/b], описанная в классе и имеющая размер [b]SZ[/b]. Строка может сожержать буквенные и цифровые символы. &lt;/P&gt;&lt;P&gt;В цикле&lt;/P&gt;&lt;P&gt;[code]for (int i = 0; int &amp;lt; SZ; i++)&lt;/P&gt;&lt;P&gt;            if ( str[i] &amp;gt;= '0' &amp;amp;&amp;amp; str[i] &amp;lt;= '9')&lt;/P&gt;&lt;P&gt;                   ...&lt;/P&gt;&lt;P&gt;[/code]Определяется, какой символ, буквенный или цифровой. &lt;/P&gt;&lt;P&gt;Пример приведён для цифровых символов строки</description><pubDate>Sun, 26 Nov 2006 23:12:57 GMT</pubDate><dc:creator>Alex_p</dc:creator></item><item><title>RE: Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Вы зря описываете объект tmp, который к тому же даже не инициализируете. Левый операнд определяемого вами оператора это объект, на который указывает this, а обращаясь к полям этого объекта this можно даже не указывать. Например, вместо this.str[i] можно просто писать str[i].&lt;/P&gt;&lt;P&gt;P.S. В вашем коде я не разобрался. Скорее всего он имеет смысловые ошибки.</description><pubDate>Sun, 26 Nov 2006 22:07:56 GMT</pubDate><dc:creator>palva</dc:creator></item><item><title>Перегрузка оператора</title><link>http://www.relib.com/forums/Topic908007-7-1.aspx</link><description>Подскажите пожалуйста, способ перегрузки операторов &amp;gt;= и &amp;lt;=  в следующей строке&lt;P&gt;[code]if ( ob.str[i] &amp;gt;= '0'  &amp;amp;&amp;amp; ob.str[i] &amp;lt;= '9' )[/code]&lt;/P&gt;&lt;P&gt;Мой вариант не перегружает:&lt;/P&gt;&lt;P&gt;[code]&lt;/P&gt;&lt;P&gt;class MyClass&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;             std::string str[SZ];&lt;/P&gt;&lt;P&gt; public:&lt;/P&gt;&lt;P&gt;    int   operator&amp;gt;= (unsigned char ch)&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P&gt;//=================================&lt;/P&gt;&lt;P&gt;int MyClass::operator&amp;gt;=(unsigned char ch)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;     MyClass tmp;&lt;/P&gt;&lt;P&gt;     for ( int i = 0; i &amp;lt; 10; i++)&lt;/P&gt;&lt;P&gt;          if ( tmp.str[i] &amp;gt;= ch)&lt;/P&gt;&lt;P&gt;                 return 1;&lt;/P&gt;&lt;P&gt;        else&lt;/P&gt;&lt;P&gt;                 return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;[/code]</description><pubDate>Sun, 26 Nov 2006 18:08:52 GMT</pubDate><dc:creator>Alex_p</dc:creator></item></channel></rss>