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

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

Восстановить пароль Регистрация
 
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
30.06.2011, 12:28     Перегрузка операторов с++ #1
Доброго времени суток!Вот у меня перегрузка оператора +.Задание сделапть пергрузку так чтобы к строке можно было добавить символ и к символу строку(при этом символ пибавляется в начало строки)!При компиляции этого фрагментта пишет что данный оперетор уже существует!И я немогу понять как изменить второй вариант перегрузки чтобы такой ошибки небыло!Жду прлезных ответов, заранее спасибо!
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);
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2011, 12:28     Перегрузка операторов с++
Посмотрите здесь:

Перегрузка операторов. C++
C++ Перегрузка операторов(=,+)
C++ Перегрузка операторов С++
C++ перегрузка операторов
C++ Перегрузка операторов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
30.06.2011, 12:32     Перегрузка операторов с++ #2
У вас ругается на то, что параметры у операторов одного типа (типа char). Попробуйте в первом операторе вместо char передать строку. У вас же к строке прибавляет символ, а не наоборот
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 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);
    }
An1ka
65 / 70 / 2
Регистрация: 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;
 }
BART
 Аватар для BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
30.06.2011, 12:47  [ТС]     Перегрузка операторов с++ #5
можно как-то попроще, а что вот этих insert и push_back еще не учил)
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
30.06.2011, 12:52     Перегрузка операторов с++ #6
An1ka вроде надо с использованием char * а не string. У BART обработка строк происходит функциями C а не С++

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

ИМХО вашу проблему можно решить, есть во втором операторе (пост #1) передать не символ, а массив из одного элемента. Думаю компилятор ругаться не будет)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 13:35     Перегрузка операторов с++
Еще ссылки по теме:

C++ Перегрузка операторов
C++ Перегрузка операторов
C++ Перегрузка операторов +=, -=, *= и /=

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

Или воспользуйтесь поиском по форуму:
An1ka
65 / 70 / 2
Регистрация: 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;
};
Yandex
Объявления
30.06.2011, 13:35     Перегрузка операторов с++
Ответ Создать тему
Опции темы

Текущее время: 16:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru