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

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

Войти
Регистрация
Восстановить пароль
 
Nishen
398 / 237 / 80
Регистрация: 26.02.2015
Сообщений: 1,090
Завершенные тесты: 2
#1

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

15.07.2015, 15:23. Просмотров 201. Ответов 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?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2015, 15:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка операций (C++):

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

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

Перегрузка операций - C++
#include &lt;iostream&gt; using namespace std; class chislo { public: chislo(); chislo(int a,int b); chislo(const chislo&amp;); ...

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

Перегрузка операций - C++
Добрый день! Задание простенькое но не могу решить так как не получается перегрузка операций. Задание: Вычислить точное значение суммы...

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

4
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
15.07.2015, 15:26 #2
Идет неявная конвертация во float, т.к. идет присваивание значению типа float.
0
Nishen
398 / 237 / 80
Регистрация: 26.02.2015
Сообщений: 1,090
Завершенные тесты: 2
15.07.2015, 15:29  [ТС] #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Идет неявная конвертация во float, т.к. идет присваивание значению типа float.
Это мне ясно, но что вызвало метод преобразования из класса? Метод вызывал сам объект dist2, так?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
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();
т.е. в обычный вызов функции класса, такая запись тоже будет работать.
1
Nishen
398 / 237 / 80
Регистрация: 26.02.2015
Сообщений: 1,090
Завершенные тесты: 2
15.07.2015, 15:57  [ТС] #5
Спасибо большое за разъяснения.
0
15.07.2015, 15:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2015, 15:57
Привет! Вот еще темы с ответами:

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

Перегрузка операций - C++
Не могу понять в чем ошибка. Нужно вводитьномер в формате (123) 456-789 Но почему то только возвращает число 123 #include...

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

Перегрузка операций - C++
Данная программа выполянет операции с дробями. Но у меня возникла проблема. Я создал сервисную функцию которая сокращает дробь. Ну дело том...


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

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

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