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

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

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

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

10.11.2013, 13:20. Просмотров 250. Ответов 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? Насколько я понимаю, деструктор срабатывает раньше...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 13:20     Перегрузка оператора +
Посмотрите здесь:

Перегрузка оператора ++ - C++
Написал префиксную перегрузку ++ Vremya &Vremya::operator ++ () { int sec = getSec(*this); //перевод в секунды ...

Перегрузка оператора - C++
Имеется время, например 12:12:12 Перегрузка инкремента Time &Time::operator ++ () { Next(); return *this; } ...

Перегрузка оператора - C++
Имеется код: #include <iostream> class X { public: int a; int b; int operator+(int a) {

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

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

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

Перегрузка оператора = - C++
StringOne& StringOne::operator=(char *s) { char b; strcpy(b, s); StringOne a = b; return a;//возвращает тоже самое почемуто...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
10.11.2013, 13:32     Перегрузка оператора + #2
Так и вернуть. Деструктор не сработает.
Tulosba
:)
Эксперт С++
4393 / 3236 / 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 для нее будет вызван деструктор. Не помешало бы еще на оператор присваивания и копирующий конструктор посмотреть.
Сонца
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);
}
Крюгер
10.11.2013, 14:00
  #5

Не по теме:

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

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

Не по теме:

Крюгер, пост

castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 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;
}
Сонца
23 / 23 / 6
Регистрация: 20.06.2013
Сообщений: 83
10.11.2013, 14:28  [ТС]     Перегрузка оператора + #8
castaway, большое человеческое спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2013, 14:30     Перегрузка оператора +
Еще ссылки по теме:

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

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

Перегрузка оператора ~ - C++
Добрый вечер. Помогите пожалуйста. Задание:Вектор имеет 3 числа(водить их надо самому), нужно перезагрузить оператор ТИЛЬДА, цекличным...

Перегрузка оператора << - C++
Господа, у меня когнитивный диссонанс. При компиляции программы вылезает ошибка: &quot;Ошибка 1 error C2679: бинарный &quot;&lt;&lt;&quot;: не найден...

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


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

Или воспользуйтесь поиском по форуму:
Крюгер
10.11.2013, 14:30     Перегрузка оператора +
  #9

Не по теме:

не помог, Iladno

Yandex
Объявления
10.11.2013, 14:30     Перегрузка оператора +
Ответ Создать тему
Опции темы

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