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

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

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

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

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

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

Операции с функциями - 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...

Бинарные операции - Delphi
Помогите написать две программы 1) Шифрование методом "исключающего или" 2) Шифрование и дешифрование умножением на бинарные матрицы ...

Бинарные операции - Free Pascal
Помогите решить задачу: Недавно Паша узнал, что во многих языках программирования есть бинарные операции «И» и «ИЛИ». Операндами у...

8
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:22 #2
Не должны.
0
reaktiv12
3 / 3 / 2
Регистрация: 20.05.2013
Сообщений: 43
17.05.2014, 19:35  [ТС] #3
Не должны? А почему? А как же тогда объяснить это:
0
Миниатюры
Почему в с++ бинарные операции должны перегружаться внешними функциями?  
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,036
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
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:40 #5
Ну так у тебя левый операнд типа int, надо так и перегрузить. Но при чём здесь вообще функции, всё равно не понятно.
0
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,036
17.05.2014, 19:41 #6
Upd: сначала написал, и только потом увидел пост с вырвиглазным слайдом. Так в чем вопрос тогда?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:42 #7
И какой такой Rational(3)? У тебя нет такой версии.
0
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,036
17.05.2014, 19:43 #8
Цитата Сообщение от taras atavin Посмотреть сообщение
И какой такой Rational(3)? У тебя нет такой версии.
Там конструктор с двумя параметрами, которые могут принимать значения по умолчанию. Rational(3) == Rational(3, 1).
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
17.05.2014, 19:46 #9
(3, 1) и (3) - не одно и тоже, вызывается при любых дефолтах существующая версия.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 19:46
Привет! Вот еще темы с ответами:

Почему возникает ошибка с внешними ключами? - MySQL
Добрый день, изучаю БД, столкнулся с такой ошибкой при заполнении базы данных из файла: Есть схема, в которой несколько таблиц, две из...

Numpy, бинарные операции с матрицами - Python
Опять numpy! Есть две матрицы: А с размерностью m x n, B с размерностью n x k. Нужна функция, которая получает на вход обе матрицы, а...

Нужно перегрузить для матрицы бинарные операции + - * / - C#
Ребят помогите, нужно перегрузить для матрицы бинарные операции + - * /. Если с первыми тремя я справился, то деление это ппц =). ...

Шифрование бинарные операции + Base64String с использованием ключа - C#
Немного поэкспериментировал с шифрованием, в итоге собрал такой класс: class Encryption { // Переменная ключа со...


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

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

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