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

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

Войти
Регистрация
Восстановить пароль
 
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
#1

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

10.11.2013, 13:20. Просмотров 259. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
String String::operator + (String & sg2)
{
    String tmp;
    tmp.str = new char [tmp.size = size + sg2.size];
    strcpy (tmp.str, str);
    strcat (tmp.str, sg2.str);
    return tmp;
}
Собственно вопрос: как вернуть tmp? Насколько я понимаю, деструктор срабатывает раньше...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 13:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора + (C++):

Перегрузка оператора [][] - C++
допустим у меня есть клас Matrix и я хочу опедилить оператор доступа к его елементу как реализовть оператор если простой масив я знаю а...

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора [] - C++
Есть: class any{ char arr }

Перегрузка оператора + - C++
Не могу заставить работать перегруженный оператор + в функции CMoveByVector Point.h: #define POINT_H #include <iostream> ...

Перегрузка оператора << - C++
Добрый пень! подскажите как написать код для реалилизации следующего требования: SpecialPrint &lt;&lt; &quot;text&quot; &lt;&lt; 'a' &lt;&lt; 1; ...

Перегрузка оператора - C++
При вызове оператора, и если F1.x &lt;= 0, то пишет текст 'N' должно быть &gt; 0, после чего выводит расчеты по формуле. Но мне этого не...

8
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
10.11.2013, 13:32 #2
Так и вернуть. Деструктор не сработает.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.11.2013, 13:54 #3
Сонца, Вы бы лучше свой String показали.
Цитата Сообщение от Сонца Посмотреть сообщение
tmp.str = new char [tmp.size = size + sg2.size];
Выделять память под внутренние поля надо бы в конструкторе (или аллокаторе), а не где попало.
Оператор+ должен принимать константную ссылку и быть константным.
Цитата Сообщение от castaway Посмотреть сообщение
Деструктор не сработает.
tmp локальная переменная внутри функции, поэтому, если не полагаться на RVO для нее будет вызван деструктор. Не помешало бы еще на оператор присваивания и копирующий конструктор посмотреть.
0
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
10.11.2013, 13:54  [ТС] #4
castaway,
Тогда подскажите где я не права?
Через дебагер удалось узнать, что tmp в operator+ получается нужный, но до main не доходит или не присваивается.
C++
1
2
3
4
5
6
7
8
9
int main()
{
    String sg1 ("Hello world");
    String sg2 (", hello friend!");
    String sg3;
    sg3 = sg1 + sg2;
 
    return 0;
}
Tulosba,


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class String
{
    enum {Max = 80};
    char * str;
    int size;
public:
    String ();
    String (int);
    String (char *);
    String (const String & obj);
    ~String();
    void UserFill ();
    void Print ();
    String operator + (String & sg2);
    String operator = (String & sg2);
};
String::String ()
{
    str = nullptr;
    size = 0;
}
String::String (int size)
{
    str = new char [size];
    this->size = size;
}
String::String (char * str)
{
    this->str = new char [size = (strlen (str) + 1)];
    strcpy (this->str, str);
}
String::String (const String & obj) : size (obj.size)
{
    str = new char [size];
    strcpy (str, obj.str);
}
String::~String()
{
    delete []str;
    size = 0;
}
String String::operator + (String & sg2)
{
    String tmp;
    tmp.str = new char [tmp.size = size + sg2.size];
    strcpy (tmp.str, str);
    strcat (tmp.str, sg2.str);
    return tmp;
}
String String::operator = (String & sg2)
{
    return String (sg2);
}
0
Крюгер
10.11.2013, 14:00
  #5

Не по теме:

судить об отдельных частях кода не целесообразно не видя всей картины

0
Сонца
10.11.2013, 14:05  [ТС]
  #6

Не по теме:

Крюгер, пост

0
castaway
Эксперт С++
4887 / 3022 / 370
Регистрация: 10.11.2010
Сообщений: 11,080
Записей в блоге: 10
Завершенные тесты: 1
10.11.2013, 14:24 #7
У тебя оператор присваивания не правильно работает. Правильнее будет так.
C++
1
2
3
4
5
6
7
String & String::operator = (const String & sg2)
{
    str = new char [sg2.size];
    strcpy( str, sg2.str );
    size = sg2.size;
    return *this;
}
1
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
10.11.2013, 14:28  [ТС] #8
castaway, большое человеческое спасибо!
0
Крюгер
10.11.2013, 14:30     Перегрузка оператора +
  #9

Не по теме:

не помог, Iladno

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 14:30
Привет! Вот еще темы с ответами:

Перегрузка оператора + - C++
Доброго времени суток. Есть программа, создающая связный список, который содержит числа по возрастанию #include &lt;iostream&gt; enum...

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора + - C++
Всем привет, проблема на этот раз такая. Для того, чтобы выучить классы, я пишу некое подобие класса string. Сложность вот в чем. Возникла...

Перегрузка оператора + - C++
не получается в своем классе перегрузить оператор + :( пишет &quot;error C2804: бинарный &quot;operator +&quot; имеет слишком много параметров&quot;,...


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

Или воспользуйтесь поиском по форуму:
9
10.11.2013, 14:30
Ответ Создать тему
Опции темы

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