Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
7 / 2 / 0
Регистрация: 17.11.2009
Сообщений: 116
1

Перегрузка операторов с++

30.06.2011, 12:28. Показов 1111. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!Вот у меня перегрузка оператора +.Задание сделапть пергрузку так чтобы к строке можно было добавить символ и к символу строку(при этом символ пибавляется в начало строки)!При компиляции этого фрагментта пишет что данный оперетор уже существует!И я немогу понять как изменить второй вариант перегрузки чтобы такой ошибки небыло!Жду прлезных ответов, заранее спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    S operator + (char s)//string + simbol
    {
        char * temp = new char [strlen(string)+2];
        for(int i = 0;i<strlen(string);i++)
        {
            temp[i] = string[i];
        }
        temp[strlen(string)] = s;
        temp[strlen(string)+1] = 0;
        return S(temp);
    }
    S operator + (char simbol)// simbol + string
    {
        char * temp = new char [strlen(string)+2];
        for(int i = 1;i<strlen(string);i++)
        {
            temp[i] = string[i];
        }
        temp[0] = simbol;
        temp[strlen(string)+1] = 0;
        return S(temp);
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2011, 12:28
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в...

Перегрузка операторов С++
Всем привет!:) Помогите пожалуйста разобраться в коде. Я сооооовсем начинающий и сейчас учу с++ по...

перегрузка операторов
Встала проблема с перегрузкой операторов. Обычные типа --, или += я вроде как написать смог, но...

Перегрузка операторов <<, >>
у меня есть класс, к примеру template &lt;typename type&gt; class ls { private: type val;...

7
S9
Волшебник
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
30.06.2011, 12:32 2
У вас ругается на то, что параметры у операторов одного типа (типа char). Попробуйте в первом операторе вместо char передать строку. У вас же к строке прибавляет символ, а не наоборот
0
7 / 2 / 0
Регистрация: 17.11.2009
Сообщений: 116
30.06.2011, 12:40  [ТС] 3
извините за неточность вопроса!вот так-же в классе присутствует оператор который добавляет строку к строке!поэтому я немогу передать в первый оператор строку, так как быдет аналогичная ошибка(
C++
1
2
3
4
5
6
7
S operator + (char * str)
    {
        char * temp = new char [strlen(string)+1];
        strcpy(temp,string);
        strcat(temp,str);
        return S(temp);
    }
0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
30.06.2011, 12:44 4
C++
1
2
3
4
5
6
7
8
9
10
  std::string& operator + ( std::string& str, const char c)
 {
   str.push_back( c);
   return str;
 }
 std::string& operator + ( char c, std::string& str)
 {
   str.insert( str.begin(), c);
   return str;
 }
0
7 / 2 / 0
Регистрация: 17.11.2009
Сообщений: 116
30.06.2011, 12:47  [ТС] 5
можно как-то попроще, а что вот этих insert и push_back еще не учил)
0
S9
Волшебник
656 / 259 / 88
Регистрация: 18.12.2010
Сообщений: 545
30.06.2011, 12:52 6
An1ka вроде надо с использованием char * а не string. У BART обработка строк происходит функциями C а не С++

и к тому же ваш оператор как я понял будет использоваться так: + ("a","aaaa"), хотя тут возможно я ошибаюсь))

ИМХО вашу проблему можно решить, есть во втором операторе (пост #1) передать не символ, а массив из одного элемента. Думаю компилятор ругаться не будет)
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.06.2011, 13:06 7
friend функции.

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
friend S operator +(const S& first, char s)
{
    //Все то же самое, что и в первом, только вместо string - first.string.   
}
 
friend S operator +(char s, const S& first)
{
   //Все то же самое, что и во втором, только вместо string - first.string.
}
А еще логичнее сделать их свободными а в классе S - геттер для возвращения string.
1
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
30.06.2011, 13:35 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 struct mystring
{
    mystring( ): mstr(0) {}
    mystring( char* str )
    {
      mstr = new char [strlen( str)+1];
      strncpy( mstr, str, strlen( str)+1);
    }
    mystring& operator + ( const char c) //string + simbol
    {
      size_t len =strlen( mstr);
      char *str2 = new char [len+2];
      strncpy( str2, mstr, len+2);
      str2[len] = c;
      delete[] mstr;
      mstr = str2;
     return *this;
    }
    friend mystring& operator + ( const char c, mystring& str) // simbol + string
    {
      size_t len =strlen( str.mstr);
      char *str2 = new char [len+2];
      strncpy( str2+1, str.mstr, len+1);
      str2[0] = c;
      delete[] str.mstr;
      str.mstr = str2;
     return str;
    }
    ~ mystring( ) { delete[] mstr;}
    private:
    char* mstr;
};
0
30.06.2011, 13:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2011, 13:35
Помогаю со студенческими работами здесь

Перегрузка операторов
я учусь перегружать операторы,но не получается,выдает exception class Student { public:...

Перегрузка операторов
Добрый вечер, вопрос в том, что я пытаюсь перегрузить оператор ++ постфиксно, но на нем падает...

Перегрузка операторов
В общем задание следующее: Создайте класс chess (шахматы), в котором хранятся поля шахматной доски...

Перегрузка операторов
Ошибка: &quot;error: invalid operands to binary expression ('Number *' and 'Number *') n3 = n1 * n2;&quot;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru