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

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

Войти
Регистрация
Восстановить пароль
 
reaktiv12
3 / 3 / 2
Регистрация: 20.05.2013
Сообщений: 43
#1

Почему в с++ бинарные операции должны перегружаться внешними функциями? - C++

17.05.2014, 19:21. Просмотров 264. Ответов 8
Метки нет (Все метки)

почему в с++ бинарные операции должны перегружаться внешними функциями?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 19:21     Почему в с++ бинарные операции должны перегружаться внешними функциями?
Посмотрите здесь:

Операции с функциями - C++
На данном этапе написания программы, нужно ввести(либо сгенерировать) значения некоторых параметров конденсаторов ( используется функция...

Почему перегруженные шаблоны функций должны возвращать один и тот же тип? - C++
Так как я еще очень плохо знаю шаблоны и никак не могу понять. Почему у всех перегруженных шаблонных функций с одинаковыми именами так же...

Почему изменяется значение переменной между функциями класса? - C++
Почему-то изменяется значение переменной m(кол-во специальностей) в output_spec. Пробовал в других средах покомпилить, но m все равно...

Почему не работает sqrt? Подскажите, где ошибка? Простенькая программа с тремя функциями - C++
#include "stdio.h" #include <math.h> #include "stdafx.h" double rekur(int k) { if(k==0)return 0; else return...

Динамический массив структур. Почему данные доступны после выполнения операции delete [] - C++
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю выделенную область памяти оператором delete...

работа с внешними ресурсами - C++
Написать программу копирования содержимого текстового файлав конец другого файла. Написать программу для Windows по созданию окна, куда бы...

Взаимодействие со внешними программами - C++
Какими средствами можно вызвать на выполнение внешнюю программу? Суть такова, что мне нужно из своей программы запустить два .exe файла и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:22     Почему в с++ бинарные операции должны перегружаться внешними функциями? #2
Не должны.
reaktiv12
3 / 3 / 2
Регистрация: 20.05.2013
Сообщений: 43
17.05.2014, 19:35  [ТС]     Почему в с++ бинарные операции должны перегружаться внешними функциями? #3
Не должны? А почему? А как же тогда объяснить это:
Миниатюры
Почему в с++ бинарные операции должны перегружаться внешними функциями?  
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
17.05.2014, 19:40     Почему в с++ бинарные операции должны перегружаться внешними функциями? #4
Точнее будет сказать - не обязаны.
Сходу есть пара логических причин бинарные операторы делать внешними функциями.
1. Допустим, у нас есть класс Integer - обертка над типом int. Пусть у него перегружен оператор+ и есть два объекта - a и b.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class Integer {
public:
    Integer(int n = 0) : data_{n} {}
    
    Integer operator+(const Integer& rhs) const {
        return Integer{data_ + rhs.data_};
    }
    
private:
    int data_;
};
 
int main() {
    Integer a {1}, b {2};
    Integer c;
    c = a + b;
    
    return 0;
}
Тут запись a + b по сути эквивалентна a.operator+(b). Но вопрос - на каком основании a важнее b? Почему метод должен вызываться от определенного объекта? Сложение - бинарная операция, аргументы которой равноправны.

2. Вторая причина - следование принципу "выносить из класса все, что возможно".
3. Сложение обладает свойством коммутативности. Плюс, у нас есть не-explicit конструктор с одним параметром. В этом случае, если мы оставляем перегруженный оператор методом класса, у нас нарушается свойство коммутативности в случае приведения типов:
C++
1
2
c = 1 + a; // ошибка компиляции
c = a + 1; // ok
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:40     Почему в с++ бинарные операции должны перегружаться внешними функциями? #5
Ну так у тебя левый операнд типа int, надо так и перегрузить. Но при чём здесь вообще функции, всё равно не понятно.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
17.05.2014, 19:41     Почему в с++ бинарные операции должны перегружаться внешними функциями? #6
Upd: сначала написал, и только потом увидел пост с вырвиглазным слайдом. Так в чем вопрос тогда?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:42     Почему в с++ бинарные операции должны перегружаться внешними функциями? #7
И какой такой Rational(3)? У тебя нет такой версии.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
17.05.2014, 19:43     Почему в с++ бинарные операции должны перегружаться внешними функциями? #8
Цитата Сообщение от taras atavin Посмотреть сообщение
И какой такой Rational(3)? У тебя нет такой версии.
Там конструктор с двумя параметрами, которые могут принимать значения по умолчанию. Rational(3) == Rational(3, 1).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 19:46     Почему в с++ бинарные операции должны перегружаться внешними функциями?
Еще ссылки по теме:

Ошибки с неразрешенными внешними символами - C++
1&gt;new_menu.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;void __cdecl setPassword(char *)&quot; (?setPassword@@YAXPAD@Z) в...

Бинарные файлы - C++
Всё началось с необходимости наличия программы, в которую вводишь число и она говорит есть ли такое в файле(мне кажется удобнее...

Бинарные файлы - C++
Ребята у вас есть какие та примеры программок работы с бинарными файлами, к примеры поменять местами максимальные и минимальные значения...

Бинарные деревья - C++
Здравствуйте господа. Очень нуждаюсь в вашей помощи по бинарным деревьям. Собственно, имеется задание: Создать бинарное дерево которое...

бинарные деревья - C++
Вот у меня есть программа, которая создает бинарное дерево из массива целых чисел. #include &lt;iostream&gt; #include &lt;conio.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:46     Почему в с++ бинарные операции должны перегружаться внешними функциями? #9
(3, 1) и (3) - не одно и тоже, вызывается при любых дефолтах существующая версия.
Yandex
Объявления
17.05.2014, 19:46     Почему в с++ бинарные операции должны перегружаться внешними функциями?
Ответ Создать тему
Опции темы

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