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

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

Войти
Регистрация
Восстановить пароль
 
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
#1

Перегрузка операций - C++

15.07.2015, 15:23. Просмотров 195. Ответов 4
Метки нет (Все метки)

Цитата из Р. Лафоре "Объекто-ориентированное программирование в C++":
Объект, стоящий с левой стороны операции ... вызывает функцию оператора. Объект, стоящий справа от знака операции, должен быть передан в функцию в качестве аргумента.
Далее идет пример:
Кликните здесь для просмотра всего текста
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------//
//Определение класса Distance
//---------------------------------------------------------------------------//
class Distance{
    private:
        const float MTF;
        int feet;
        float inches;
    public:
        Distance() : feet(0), inches(0.0), MTF(3.280833F)
        {}
        Distance(float meters) : MTF(3.280833F){
            float fltfeet = MTF * meters;
            feet = static_cast<int>(fltfeet);
            inches = 12 * (fltfeet - feet);
        }
        Distance(int ft, float in) : feet(ft), inches(in), MTF(3.280833F)
        {}
        void getDist(){
            cout << "\nВведите футы: "; cin >> feet;
            cout << "Введите дюймы: "; cin >> inches;
        }
        void showDist() const{
            cout << feet << "\'-" << inches << '\"';
        }
        operator float() const{
            float fracfeet = inches / 12;
            fracfeet += static_cast<float>(feet);
            return fracfeet / MTF;
        }
};
//-----------------------------------------------------------------------------
int main(){
    setlocale(LC_ALL, "Russian");
    float mtrs;
    Distance dist1 = 2.35F;
    cout << "\ndist1 = "; dist1.showDist();
 
    mtrs = static_cast<float>(dist1);
    
    cout << "\ndist1 = " << mtrs << " meters\n";
 
    Distance dist2(5, 10.25);
 
    mtrs = dist2;
    cout << "\ndist2 = " << mtrs << " meters\n";
 
    system("PAUSE");
    return 0;
}


Собственно, вопрос заключается в следующем. В данном примере есть строка
C++
1
mtrs = dist2;
Что в этой строке вызывает функцию оператора перевода в тип float? Знак равно или переменная mtrs?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2015, 15:23     Перегрузка операций
Посмотрите здесь:

Перегрузка операций - C++
Добрый день форумчане, помогите решить задачку Перегрузить 8 операторов для класса Вот пример класса class Money{ unsigned long...

Перегрузка операций << и >> - C++
Всем добрый день.. У меня такая проблема, не получается перегрузить операторы &lt;&lt; и &gt;&gt; для своего класса, делаю вот так: class CMPLX ...

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

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

перегрузка операций - C++
Обычным методом задача решена, помогите пожалуйста сделать перегрузку операций Условие: Указанные в заданиях операции реализовать...

Перегрузка операций - C++
Выполнить перезагрузку перечисленных операций, закрепив за ними соответствующий функциональный смысл! дано шестнадцатиричное число. &quot;+&quot;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
15.07.2015, 15:26     Перегрузка операций #2
Идет неявная конвертация во float, т.к. идет присваивание значению типа float.
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
15.07.2015, 15:29  [ТС]     Перегрузка операций #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Идет неявная конвертация во float, т.к. идет присваивание значению типа float.
Это мне ясно, но что вызвало метод преобразования из класса? Метод вызывал сам объект dist2, так?
DrOffset
7060 / 4201 / 949
Регистрация: 30.01.2014
Сообщений: 6,968
15.07.2015, 15:44     Перегрузка операций #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nishen Посмотреть сообщение
но что вызвало метод преобразования из класса?
Преобразование и вызвало.

В С++ вообще много какие выражения могут приводить к вызову операторных функций.
Например, при перегрузке оператора * для класса А, и написании в коде
C++
1
2
A a, b;
A c = a * b;
мы получим вызов оператора *. Но явно вызова в коде нигде нет. Выражение a * b означает следующее:
C++
1
A c = operator*(a, b); // или a.operator*(b);
Тут такая же картина. Выражение
C++
1
mtrs = dist2;
потребовало преобразования типов. Компилятор поискал среди доступных для этого класса возможных преобразований и нашел твой оператор float. Он подошел больше других (т.к. он единственный), его и вызвали. Т.е. по сути этот код превратился вот в такое:
C++
1
mtrs = dist2.operator float();
т.е. в обычный вызов функции класса, такая запись тоже будет работать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 15:57     Перегрузка операций
Еще ссылки по теме:

Перегрузка операций - C++
Задание у меня перегрузить операции: + добавить элемент в множество; * пересечение множеств; int() мощность множества. Вот...

Перегрузка операций - C++
C++ ругается когда я пытаюсь сделать след-ю перегрузку операций. У меня трехмерный массив matrix и в цикле мне нужно использовать не...

Перегрузка операций '<<' и '>>' - C++
Добрый вечер всем:) У меня вот такое задание: Создайте класс, реализующий однонаправленную очередь. В интерфейс класса должны входить...

Перегрузка операций - C++
Начал изучать перегрузку операций, и чего-то вроде не понял или что... Вообщем не могу понять чего не компилит. Проект и ошибка в...


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

Или воспользуйтесь поиском по форуму:
Nishen
342 / 180 / 68
Регистрация: 26.02.2015
Сообщений: 892
15.07.2015, 15:57  [ТС]     Перегрузка операций #5
Спасибо большое за разъяснения.
Yandex
Объявления
15.07.2015, 15:57     Перегрузка операций
Ответ Создать тему
Опции темы

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