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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
proggr
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 3
#1

перегрузка & operator+= - C++

24.03.2011, 11:44. Просмотров 1222. Ответов 11
Метки нет (Все метки)

Изучая C++, наткнулся в одном из упражнений на такое выражение: Port & operator+=(int b).

Зная, что x+=y можно представить как x = x + y, не пойму, можно ли представить так же и вышеприведенное выражение? Если можно, то каким образом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 11:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос перегрузка & operator+= (C++):

Перегрузка operator T& - C++
Почему не срабатывает перегруженный оператор T& ?template <typename T> struct Test { T value_; operator T&() { return...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? - C++
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? - C++
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

Friend ostream& operator<<(ostream& stream, CArr& obj); - C++
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void swap(int *a, int *b); void swap(int &amp;a, int &amp;b); ...

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) - C++
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в пользовательский тип? Ведь мы заранее не можем...

11
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 12:34 #2
C++
1
2
3
4
5
6
7
8
9
10
11
class Port
{
public:
    Port & operator += (int b)
    {
        a += b;
        return *this;
    }
 
    int a;
};
Добавлено через 47 секунд
Оператор суммы можно применять к различным типам и не только для суммы.

Добавлено через 1 минуту
Т.е. это может быть не только алгебраическое суммирование, а вообще всё что угодно.
1
morgan4ik
3 / 3 / 0
Регистрация: 04.12.2009
Сообщений: 43
24.03.2011, 13:57 #3
подскажите как работает *this????буду благодарен
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.03.2011, 14:03 #4
Он никак не работает. Это просто указатель на экземпляр класса, членом которого он одновременно является (т.е. неявным членом класса является указатель на себя).
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 14:05 #5
C++
1
2
3
int * this = new int(5);
 
int b = *this;
Но this не int, а Port. В данном случае.

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
членом которого он одновременно является
Только членом класса он не является. А востальном, ага.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.03.2011, 14:07 #6
Deviaphan, а чем он является?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 14:12 #7
Указатель this не существует, как член класса.
Пустой класс имеет нулевой размер, но имеет указатель this.

Добавлено через 1 минуту
this это адресс объекта. Если вдаваться во (множественное)наследование, то всё немного сложнее, но суть та же. Это адрес объекта.
1
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.03.2011, 14:20 #8
Deviaphan, да-да, извиняюсь, уже понял, что тупанул))) Он существует как реальная переменная только в методах, чтобы, собственно, они могли обращаться к конкретному экземпляру. Ещё раз извиняюсь.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 14:25 #9
*к данным-членам конкретного экземпляра
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.03.2011, 14:29 #10
Deviaphan, думал, это как-то само собой разумеется...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 14:32 #11
Я уточняю для тех, кто про this спрашивает. Для них не разумеется.)
1
silent_1991
24.03.2011, 14:42     перегрузка & operator+=
  #12

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Для них не разумеется
Логично)))

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

Перегрузка operator= - C++
Возможно ли перегрузить оператор= так, что бы можно было написать? val = {10, 20, 15};

Перегрузка operator+ - C++
при сложени myVector2 = myVector0 + myVector1; выодит сообщения &quot;конструктоор 0&quot; ...1,...2,....2(копирования) а потом деструктор 2,2,1,2...

Перегрузка operator new - C++
Столькнулся с такой проблемой: Есть класс Array, в его конструкторе создается массив int Array::Array(const size_t...

Перегрузка operator+ - C++
Нужно сложить число с каждым елементом вектора, вот мой код: MyVectorClass.h namespace program { class MyVectorClass { ...


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

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

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