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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Nesh
3 / 3 / 0
Регистрация: 25.06.2009
Сообщений: 95
#1

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

25.10.2012, 07:50. Просмотров 1164. Ответов 20
Метки нет (Все метки)

Всем привет. Дошел до темы перегрузки операторов и возникло два вопроса.
Первый:
Чем отличается вот этот код
C++
1
2
3
4
5
6
7
8
9
10
String  String::operator+=(const String other)
{
    char *c_str = new char[str_size + other.str_size + 1];
    strcpy(c_str, str);
    strcat(c_str, other.str);
    delete[] str;
    str = c_str;
    str_size = str_size + other.str_size; 
    return *this;
}
От этого
C++
1
2
3
4
5
6
7
8
9
10
String & String::operator+=(const String &other)
{
    char *c_str = new char[str_size + other.str_size + 1];бо
    strcpy(c_str, str);
    strcat(c_str, other.str);
    delete[] str;
    str = c_str;
    str_size = str_size + other.str_size; 
    return *this;
}
Различия только в ссылках, Но работает вроде одинаково что в первом что во втором случаях.
И второй:
Зачем возвращать указатель на текущий объект?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 07:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос перегрузка операторов (C++):

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

Перегрузка операторов - C++
Доброго времени суток! Столкнулся с такой проблемой, перегрузка операторов. Имею работающий код, но не смог сделать по своему заданию. ...

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

Перегрузка операторов - C++
Решите пожалуйсто задачу: Разработайте программу, в которой реализована перегрузка оператора «^». Оператор «^» должен возводить...

[c++] Перегрузка операторов - C++
Не работает. #include <conio.h> #include <iostream.h> #pragma argsused struct FazzyNumber { double x; double x1,x2; ...

C++ перегрузка операторов - C++
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить оператор умножения что бы умножить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.10.2012, 01:41 #16
~OhMyGodSoLong~, Да их вообщем-то и не разместишь снаружи-то.
Nesh
3 / 3 / 0
Регистрация: 25.06.2009
Сообщений: 95
10.11.2012, 15:22  [ТС] #17
Еще интересуют вот эти два момента
C++
1
String String::operator+=
и
C++
1
String & String::operator+=
Для чего возвращать ссылку и когда это нужно?
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
10.11.2012, 15:48 #18
Цитата Сообщение от Nesh Посмотреть сообщение
Для чего возвращать ссылку и когда это нужно?
Чтобы возвращать сам объект, а не его копию.
Просто как пример:
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
#include <iostream>
#include <string>
using std::string;
using std::cout;
class str{
private:
    string s;
public:
    string & operator=(const char *rhv){
        s.append(rhv); return s;
    }
    string & getstr(){return s;}
    str  operator+=(const char *rhv){//протестируйте так, а потом так str  & operator+=(const char *rhv)
        s.append(rhv);
        return *this;
    }
};
 
 
void AddString(str &s){
    s+="C";
}
 
int main(){
        
    str s;
    s="A";
    AddString(s+="B");
    s+="D";
    cout<<s.getstr()<<"\n";
    system("pause");
    return 0;
}
Nesh
3 / 3 / 0
Регистрация: 25.06.2009
Сообщений: 95
10.11.2012, 16:26  [ТС] #19
Еще такой вопрос:
C++
1
void foo(const type &)
Зачем передавать параметр методу по ссылки если менять его все равно не собираемся?
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
10.11.2012, 16:31 #20
Цитата Сообщение от Nesh Посмотреть сообщение
Зачем передавать параметр методу по ссылки если менять его все равно не собираемся?
По сути ссылка - это такой указатель своеобразный.
Так что если у нас передается структура, размером в 100 байт, то "дешевле" передать по ссылке. Плюс ко всем, если Вы передаете не по ссылке, то создается копия объекта, а это значит, что будет лишний вызов конструктора копирования.
Nesh
3 / 3 / 0
Регистрация: 25.06.2009
Сообщений: 95
10.11.2012, 16:38  [ТС] #21
То есть это все для производительности. Все понял. Спасибо большое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 16:38
Привет! Вот еще темы с ответами:

Перегрузка операторов - C++
В общем учу эту тему и ввожу код один в один как в уроке, но в уроке он компилится, а у меня нет. Ругается на &quot;c1++;&quot;, подскажите...

Перегрузка операторов - C++
Создайте класс Fraction (обыкновенная дробь), в котором реализовать перегрузку: оператора суммирования дробей, оператора суммирования дроби...

Перегрузка операторов ++ - C++
доброго времени суток. есть утечка памяти как я понимаю, но не мойму почему. о чем программа: есть обьект типа MString. В этом классе...

Перегрузка операторов - C++
Даны два одномерных массива. Необходимо сделать перегрузку разности ( - ) этих массивов с получением этого массива.


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

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

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