|
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
|
|||||||||||
Преобразования объектов классов в объекты других классов19.07.2009, 00:25. Показов 6622. Ответов 9
Метки нет (Все метки)
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50 долларов. Каждая валюта - разный класс. Конвертирование нужно реализовать в преобразовании типов.
Вот мой код
Вот ошибки
Помогите сей бред превратить в работающий. P.S.сильно не пинайте.
0
|
|||||||||||
| 19.07.2009, 00:25 | |
|
Ответы с готовыми решениями:
9
Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов |
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.07.2009, 00:39 | |
|
Как у тебя будет виден класс BMoney, в классе sterling, если он объявлен после него? Либо включай двойно проход, либо объявляй в области видимости.
0
|
|
|
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
|
||
| 19.07.2009, 00:51 [ТС] | ||
|
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 19.07.2009, 00:52 | |
|
У тебя BMoney объявлен после Sterling. Поэтому в Sterling твой класс BMoney не виден. Это как использование переменной до ее объявления. Ну это, для начала, одна из ошибок )
1
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||||||
| 19.07.2009, 00:55 | ||||||
|
insolent, перед классом sterling объви класс BMoney.
+ ошибки с double'ами у тебя вызваны из-за присвоения типа double типу int. используй явное преобразование.
1
|
||||||
|
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
|
|||||||||||
| 19.07.2009, 01:03 [ТС] | |||||||||||
|
Monte-Cristo, теперь
такое
P.S. Я тупо добавил,ничего не меняя
0
|
|||||||||||
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
| 19.07.2009, 01:14 | |
|
видимо добавление class BMoney; не всегда помогает.
вот рабочий (вроде) листинг.. по крайней мере компилиуертся. листинг
#include <iostream>
using namespace std; ////////////////////////////////////////////////////////////////////////// class BMoney; class sterling; class sterling{//фунты стерлингы private: long pound; //фунты int shilling; // шиллингы int pence; // пенсы public: sterling() ound(0),shilling(0),pence(0)//конструктор без аргументов{}; sterling(long p,int s,int pe) ound(p),shilling(s),pence(pe)//конструктор с тремя аргументами{}; sterling(double bp)//конструктор с одним аргуметом типа double(грубо говоря, из double в sterling { pound = (long)bp;//целая часть присваивается фунтам shilling = (int)((bp - pound)*20);//цела часть от умножения остатка на 20(1 фунт = 20 шиллингов) pence = (int)((bp - pound)*240 - shilling*12);//находим общее количество пенсов(остаток умножить на 240) // и вычитаем количество шиллингов(1 шиллинг = 12 пенс) } void getSterling()//получение от пользователя данных { cout << "Введите количество фунтов, шиллинго и пенсов(x.y.z): "; wcin >> pound >> shilling >> pence; _flushall(); } void putSterling()//вывод значения { char ch = 'Ь'; cout << ch << pound << "." << shilling << "." << pence << endl; } sterling operator+ (sterling s2)const//сумма { return sterling(double(sterling(pound,shilling, pence)) + double(s2)); } sterling operator- (sterling s2)const//разность { return sterling(double(sterling(pound,shilling, pence)) - double(s2)); } sterling operator* (double temp)const//произведение на число { return sterling(double(sterling(pound,shilling, pence)) * temp); } sterling operator/ (sterling s2)const//деление { return sterling(double(sterling(pound,shilling, pence)) / double(s2)); } sterling operator/ (double temp)const//деление на число { return sterling(double(sterling(pound,shilling, pence)) / temp); } operator double ()const//преобразование в тип double { double temp = (double)(pound + (double)(shilling + (double)pence/12)/20); return temp; } operator BMoney ()const;//преобразование в доллары }; ////////////////////////////////////////////////////////////////////////// class BMoney{//доллар private: double money;//значение public: BMoney():money(0)//конструктор без аргумента {}; BMoney(double d):money(d)//конструктор с одним аргументом {}; void getMoney()//ввод данных { cout << "Введите количество денег: "; wcin >> money; _flushall(); } void putMoney()//вывод { cout << money << endl; } BMoney operator+ (BMoney m2)const//сложение { return BMoney(money + m2.money); } BMoney operator- (BMoney m2)const//вычитание { return BMoney(money - m2.money); } BMoney operator* (double d2)const//умножение на число { return BMoney(money*d2); } BMoney operator/ (BMoney m2)const//деление { return BMoney(money/m2.money); } BMoney operator/ (double d2)const//деление на число { return BMoney(money/d2); } operator sterling()const//преобразование в фунты { return sterling(money/50); } }; sterling::operator BMoney ()const//преобразование в доллары { return BMoney((double)((pound + (double)((shilling + (double)(pence/12))/20)*50) )); } ////////////////////////////////////////////////////////////////////////// int main(int argc, char* argv[]) { setlocale(0,""); sterling s1, s2(7,17,9), s3(10.52); BMoney m1, m2(600.56); s1.getSterling(); cout << "s1 = "; s1.putSterling(); cout << endl; cout << "s2 = "; s2.putSterling(); cout << endl; cout << "s3 = "; s3.putSterling(); cout << endl; m1.getMoney(); cout << "m1 = "; m1.putMoney(); cout << "m2 = "; m2.putMoney(); getchar(); return 0; } в таком случае, объяви оператор в классе, а определи вне класса.
1
|
|
|
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
|
|
| 19.07.2009, 01:27 [ТС] | |
|
Monte-Cristo, СПС за помощь!
0
|
|
|
Заказ софта
343 / 188 / 21
Регистрация: 26.05.2009
Сообщений: 863
|
|
| 19.07.2009, 12:29 | |
|
Лучше было бы сделать класс деньги. Потом сделать двух наследников - баксы и фунты. Удобнее было бы !
0
|
|
|
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
| 19.07.2009, 12:40 | |
|
Search.., это задача из книги Р.Лафоре "Объектно-ориентированное программированиев C++". Наследование будет изучаться в следующей главе.
![]() Стерлинг и доллар не очень-то и походи) так что создание двух разных классов это типичный случай.
0
|
|
| 19.07.2009, 12:40 | |
|
Помогаю со студенческими работами здесь
10
Файлы и объекты производных классов Объекты различных классов в списке Где создавать объекты классов? Использование классов в С++. Простые объекты. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|