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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BART
7 / 2 / 1
Регистрация: 17.11.2009
Сообщений: 116
#1

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

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

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

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

перегрузка операторов - C++
на примере класса Line не получается правильно и без ошибок перегрузить следующие операторы ==, &lt;, !=, &lt;&lt;. с = и вроде справился, с...

Перегрузка операторов - C++
Здравствуйте. Помогите пожалуйста. Может кто то помочь разобраться с перегрузкой операторов. Мне бы простенький рабочий пример не помешал...

Перегрузка операторов - C++
Я новичек в С++, столкнулась с перегрузкой операторов. Подскажите пожалуйста в чем принципиальное отличие таких обьявлений: Имя_класса&amp;...

Перегрузка операторов - C++
Доброго всем времени суток!Пожалуйста помогите мне неучу разобраться.Пытаюсь разобраться с классами,но пока безуспешно без посторонней...

перегрузка операторов - C++
Имеется такая программа: class reversion { vector&lt;int&gt; mass1; vector&lt;int&gt; mass2; vector&lt;int&gt; rev1; vector&lt;int&gt; rev2; ...

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

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

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

Перегрузка операторов >>, << - C++
Помогите перегрузить операторы ввода и вывода в классе Time. (Я совсем-совсем новичек...)Заранее всем спасибо.class Time { friend...

[c++] Перегрузка операторов - C++
Для заданных A = (A – a1, A, A + a2) и B = (B – b1, B, B + b2) Найти сумму A + B = (A + B – a1 – b1, A + B, A + B + a2 + b2); ...

Перегрузка операторов - C++
Вот задание b) Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами: &quot;+&quot; –...

Перегрузка операторов С++ - C++
Задание: Написать код на языке С++ где реализуется перегрузка операторов. Тематика: База данных института(студенты, аспиранты,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.06.2011, 13:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru