Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
dailydose
659 / 205 / 88
Регистрация: 21.07.2016
Сообщений: 1,024
Записей в блоге: 2
Завершенные тесты: 1
#1

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++

03.05.2017, 18:19. Просмотров 161. Ответов 3
Метки нет (Все метки)

Привет!

Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг?

Добавлено через 4 минуты
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
class Test
{
    int m_value;
public:
    int operator+(const Test& other)
    {
        return m_value + other.m_value;
    }
    friend int operator-(const Test& t1, const Test& t2)
    {
        return t1.m_value - t2.m_value;
    }
 
 
    Test(int value=100):m_value(value) {}
    ~Test() {}
};
 
int main()
{   
    Test t1, t2(5);
    
    std::cout << t1 + t2 << std::endl;
    std::cout << t1 - t2 << std::endl;
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2017, 18:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перегрузка в виде метода VS Перегрузка в виде функции друг (C++):

Перегрузка метода и дружественной функции
class A { private: void foo() { A a; a.bar(); bar( a ); //...

Перегрузка операций для класса целых двоичных чисел в виде строк
нужна ваша помощь, пожалуйста Создать класс, который запоминает целые двоичные...

функция друг, перегрузка <<
Доброго времени суток, Господа! Имеется следующий код: class Time { ...

Перегрузка метода operator+
Перегрузить + , так чтобы вы находили скалярное произведение двух объектов.

Перегрузка функции
Что такое перезагрузка функции в с++? Для чего она нужна? Есть случаи, когда...

Перегрузка функции
Написать перегрузку функции: 1. а) Для массива целых чисел находит середнее...

3
Ferrari F1
791 / 521 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
03.05.2017, 18:26 #2
dailydose, перегрузка в виде метода обязательна для operator =,[],(),->
бинарные арифметические и реляционные операторы лучше делать функциями

ПС: го вк

Добавлено через 1 минуту
Цитата Сообщение от dailydose Посмотреть сообщение
а когда в виде функции друг?
она не обязана быть дружественной по причине возможного использования интерфейса класса
0
hoggy
Заблокирован
03.05.2017, 18:30 #3
Лучший ответ Сообщение было отмечено dailydose как решение

Решение

Цитата Сообщение от dailydose Посмотреть сообщение
int operator+(const X& other)
предполагает конструкцию вида: я + X
Цитата Сообщение от dailydose Посмотреть сообщение
friend int operator-(const X& t1, const Я& t2)
предполагает конструкцию вида: X - Я

в первом случае с левой стороны всегда стоит объект класса.

второй случай используется,
когда нужно указать лево-сторонний тип.
1
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
03.05.2017, 18:31 #4
Нет таких понятий как "перегрузка в виде метода" и "перегрузка в виде функции друг".
Если вы хотите сказать про операторы, реализованные в виде методов и в виде перегруженных функций - то разница тут скорее в том, что методы уже содержат *this объект и для операций подставляют его в качестве первого параметра, а friend нарушает инкапсуляцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct A
{
    int x;
    A operator+(const int y) { return {x + y}; }
};
 
A operator+(const int y, const A &a) { return {a.x + y}; }
 
int main()
{
    A a{42};
    A b = a + 2; // вызов a.operator(2)
    A c = 2 + a; // вызов operator+(const int y, const A &a)
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2017, 18:31
Привет! Вот еще темы с решениями:

Перегрузка функции
Помогите плз сделать лабораторную по программированию Задание такое: ...

Перегрузка функции
class num { private: long a; long b; int c; int d; public: num();...

Перегрузка функции в С++
1. Определить функцию Search(), которая позволяет найти самое длинное слово в...

Перегрузка функции
Подскажите пожалуйста, почему не получается перегрузить функцию(например вместо...


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

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

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