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

Непонятно решение задачи - C++

Восстановить пароль Регистрация
 
GoodDay
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 24
18.07.2012, 23:59     Непонятно решение задачи #1
Во общем есть задача по теме классов и преобразование типов, долго думал не мог понять что надо сделать.
Нашел решение, но некоторые моменты не ясны
Сама задача:
Создайте класс sterling, состоящий из фунт типа long, шиллинга типа int, и пенса типа int
Создайте конструктор без аргументов
Конструктор с одним аргументом типа double ( для преобразования от десятичных фунтов)
Конструктор с тремя аргументами
Метод для получения от пользователя значений
Метод вывода полученных значений
Метод сложения sterling+sterling
Метод вычитания sterling-sterling
Метод деления sterling/sterling
Метод деления sterling/double
Метод умножения sterling*double
Листинг программы:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include<iostream>
 
#include<conio.h>
using namespace std;
 class sterling
 {
 private:
     long funt;
     int shilling;
     int pens;
 
 public:
     sterling():funt(0),shilling(0),pens(0) {}
     sterling(double desFunt)
     {
         funt=static_cast<long>(desFunt);
         shilling=static_cast<int>((desFunt - funt)*20);
         pens=static_cast<int>((desFunt - funt)*240-shilling*12);
     }
     sterling (long fu, int sh, int pe):funt(fu),shilling(sh),pens(pe)
     {}
        
 
     operator double ()const//преобразование в тип double
        {
          double temp = (double)(funt + (double)(shilling + (double)pens/12)/20);
          return temp;
        }
     void getSterling()
     {
       char dummychar='.';
       cin>>funt>>dummychar>>shilling>>dummychar>>pens;
     }
 
     void putSterling()
     {
       cout<<"\nОтвет в старых фунтах: "<<funt<<'.'<<shilling<<'.'<<pens;
     }
     sterling operator+(sterling);
     sterling operator-(sterling);
     sterling operator/(sterling);
     sterling operator/(double temp);
     sterling operator*(double temp);
 };
 
 sterling sterling::operator+(sterling sterling2)
 {
     return sterling(double(sterling(funt,shilling,pens))+double(sterling2));
 }
 sterling sterling::operator-(sterling sterling2)
 {
     return sterling(double(sterling(funt,shilling,pens))-double(sterling2));
 }
 sterling sterling::operator/(sterling sterling2)
 {
     return sterling(double(sterling(funt,shilling,pens))/double(sterling2));
 }
 sterling sterling::operator/(double temp)
 {
     return sterling(double(sterling(funt,shilling,pens))/double(temp));
 }
 sterling sterling::operator*(double temp)
 {
     return sterling(double(sterling(funt,shilling,pens))*double(temp));
 }
int main()
{
   setlocale(LC_CTYPE,"Russian");
   sterling sterling1, sterling2, sterling3, sterling4, sterling5, sterling6,sterling7;
   double chis;
 
   cout<<"Введите первую сумму в фунтах, шиллингах и пенсах : ";
   sterling1.getSterling();
    
   cout<<"Введите вторую сумму в фунтах, шиллингах и пенсах : ";
   sterling2.getSterling(); 
 
   sterling1.putSterling();
   sterling2.putSterling();
 
   sterling3=sterling1+ sterling2;
   sterling3.putSterling();
 
   sterling4=sterling1- sterling2;
   sterling4.putSterling();
 
   sterling5=sterling1/sterling2;
   sterling5.putSterling();
 
   cout<<"\nВведите число: ";
   cin>>chis;
 
   sterling6=sterling1/chis;
   sterling6.putSterling();
 
   sterling7=sterling1*chis;
   sterling7.putSterling();
      
    _getch();
    return 0;
}
Непонятен данный фрагмент программы, что здесь происходит?
Понятно что возвращается сумма, используется конструктор стерлинг, но вложенный конструктор и что там делает тип double мне не ясно
C++
1
return sterling(double(sterling(funt,shilling,pens))+double(sterling2));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 23:59     Непонятно решение задачи
Посмотрите здесь:

Решение задачи C++
Решение задачи C++
Решение задачи c++ C++
C++ Решение задачи
C++ Условие задачи непонятно. Описать базовый класс «Элемент».
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nukutu
176 / 102 / 2
Регистрация: 22.03.2010
Сообщений: 456
19.07.2012, 09:00     Непонятно решение задачи #2
Цитата Сообщение от GoodDay Посмотреть сообщение
Понятно что возвращается сумма, используется конструктор стерлинг, но вложенный конструктор и что там делает тип double мне не ясно
преобразование в тип double
C++
1
2
3
4
5
operator double ()const//преобразование в тип double
        {
          double temp = (double)(funt + (double)(shilling + (double)pens/12)/20);
          return temp;
        }
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
19.07.2012, 09:04     Непонятно решение задачи #3
В данной строчке кода создаётся безымянный объект класса sterling. Так как его не нужно нигде больше использовать, имя ему не требуется. Для создания безымянного объекта требуется лишь указать тип объекта и аргументы, его инициализирующие.
GoodDay
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 24
19.07.2012, 15:33  [ТС]     Непонятно решение задачи #4
Понял, большое спасибо

Добавлено через 9 минут
Еще вопрос, то есть таким способом можно преобразовать в double целые классы, и использовать преобразования как функцию double()?
Nukutu
176 / 102 / 2
Регистрация: 22.03.2010
Сообщений: 456
19.07.2012, 17:29     Непонятно решение задачи #5
Цитата Сообщение от GoodDay Посмотреть сообщение
Еще вопрос, то есть таким способом можно преобразовать в double целые классы, и использовать преобразования как функцию double()?
В данном случае это метод класса. Переопределять оператор в глобальном не стоит.
GoodDay
0 / 0 / 0
Регистрация: 07.04.2012
Сообщений: 24
20.07.2012, 23:59  [ТС]     Непонятно решение задачи #6
Все равно непонятно
К примеру почему в данной строчке кода:
C++
1
 return sterling(double(sterling(funt,shilling,pens))+double(sterling2));
1)у первого стерлинга еще 3 аргумента а у второго нету аргументов
2)как он вообще их складывает
3)с помощью Double он преобразовывает поля каждого объекта стерлинг?

Добавлено через 3 часа 11 минут
Ну ребят кто нибудь объясните, не могу понять, а ооп без знания преобразований пустая трата времени
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2012, 18:02     Непонятно решение задачи
Еще ссылки по теме:

Решение задачи C++
Решение задачи C++
C++ Непонятно условие задачи: Вывести исходную матрицу, преобразованную матрицу и вектор Х.

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

Или воспользуйтесь поиском по форуму:
PreFX
25 / 20 / 1
Регистрация: 14.07.2012
Сообщений: 176
21.07.2012, 18:02     Непонятно решение задачи #7
Тут возвращается объект класса стерлинг, инициализирующийся суммой двух объектов класса sterling, переведённых в фунты. Первый безымянный объект инициализируется значениями класса, вызывающего функцию, второй является аргументом функции.
При перегрузке бинарных операторов левый операнд является объектом, вызывающим функцию, а правый передаётся в качестве аргумента (если я не ошибаюсь).
Yandex
Объявления
21.07.2012, 18:02     Непонятно решение задачи
Ответ Создать тему
Опции темы

Текущее время: 13:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru