Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
9 / 9 / 4
Регистрация: 22.10.2009
Сообщений: 24

Реализация классов и структур

28.02.2011, 11:15. Показов 2443. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include<iostream>
#include<fstream>
using namespace std;
struct Trio{
    int day;
    int month;
    int year;
    void init(int day,int month,int year){
        this->day=day;
        this->month=month;
        this->year=year;        
    }
    void read(){
        //не совсем понял, для чего эта функция
    }
    void display(){
        char buf[3][10];
        cout<<itoa(year,buf[0],10)<<((month/10==0)? ".0" :".")<<itoa(month,buf[1],10)<<((day/10==0)? ".0" :".")<<itoa(day,buf[2],10)<<endl;
    }
};
 
 
class Date{
private:
    Trio trio;
public:
    Date();
    Date(int,int,int);
    Date(Date&);
    void show();
    int getDay();
    int getMonth();
    int getYear();
    void setDay(int);
    void setMonth(int);
    void setYear(int);
    void initialize(char*);
    void dayPassed(int);
    friend ostream& operator<<(ostream& os,const Date&);
};
Date::Date(){
    trio.init(15,11,1994);
}
Date::Date(int day,int month,int year){
    trio.init(day,month,year);
}
Date::Date(Date& d){
    this->trio.day=d.trio.day;
    this->trio.month=d.trio.month;
    this->trio.year=d.trio.year;
}
ostream& operator<<(ostream& os,const Date& d){
    os<<d.trio.year<<((d.trio.month/10==0)? ".0" :".")<<d.trio.month<<((d.trio.day/10==0)? ".0" :".")<<d.trio.day;
        return os;
    }
void Date::show(){
    trio.display();
}
int Date::getDay(){
    return trio.day;
}
int Date::getMonth(){
    return trio.month;
}
int Date::getYear(){
    return trio.year;
}
void Date::setDay(int day){
    trio.day=day;
}
void Date::setMonth(int month){
    trio.month=month;
}
void Date::setYear(int year){
    trio.year=year;
}
void Date::initialize(char* str){
    char* st=new char[100];
    strcpy(st,str);
    char* s=".";
    char* w=strtok(st,s);
    trio.year=atoi(w);
    w=strtok(0,s);
    trio.month=atoi(w);
    w=strtok(0,s);
    trio.day=atoi(w);
    trio.display();
    delete[] st;
}
void Date::dayPassed(int d){
    //будем считать, что во всех месяцах 31 день
    trio.day+=d;
    trio.month+=trio.day/31;
    if(trio.day%31==0)
        trio.month--;
    trio.year+=trio.month/12;
    if(trio.month%12==0)
        trio.year--;
    (trio.day%31!=0)?(trio.day%=31):(trio.day=31);
    (trio.month%12!=0)?(trio.month%=12):(trio.month=12);
    trio.display();
}
 
class Account{
private:
    char* surname;
    int number;
    int percent;
    Date date;
    double sum;
public:
    Account(char*,int,int,Date,double);
    Account(){}
    void changeOwner(char*);
    void show();
    void drawOut(double);
    void deposit(double);
    void percents(int);
    double exchange(double);
};
Account::Account(char* surname,int number,int percent,Date date,double sum){
    this->surname=new char[50];
    strcpy(this->surname,surname);
    this->number=number;
    this->percent=percent;
    this->date=date;
    this->sum=sum;
}
void Account::changeOwner(char* owner){
    strcpy(surname,owner);
}
void Account::show(){
    cout<<surname<<" "<<number<<" "<<percent<<"% "<<date<<" "<<sum<<endl;
}
void Account::drawOut(double sum){
    if(this->sum>=sum)
        this->sum-=sum;
    else
        cout<<"error"<<endl;
 
}
void Account::percents(int per){
    this->sum+=sum*per/100;
}
void Account::deposit(double sum){
        this->sum+=sum;
}
double Account::exchange(double rate){
    return (double)(this->sum/rate);
}
int main(){
    setlocale(LC_ALL,".1251");
    Date d(15,12,2007);
    d.setDay(3);
    int f=d.getDay();
    cout<<f<<endl;
    d.show();
    d.initialize("2007.12.03");
    d.dayPassed(409);
    Account a("Иванов",2201,25,d,100);
    a.show();
    a.percents(20);
    a.show();
    a.deposit(30);
    a.show();
    a.drawOut(30);
    a.show();
    cout<<a.exchange(50)<<"$"<<endl;
    return 0;
}
В данном коде реализованы 2 задачи:

Задача 1
Реализовать структуру Trio c тремя полями (целыми без знака). В структуре реализовать методы init(), read() и display(). Реализовать класс Date, использовав в качестве поля объект типа Trio. В классе реализовать методы получения и изменения отдельных полей даты, метод инициализации строкой вида «год.месяц.день» (например, «2006.04.07»), метод вычисления даты через заданное количество дней.

Задача 2
Реализовать класс Account, представляющий собой банковский счёт. В классе должны быть пять полей: фамилия владельца, номер счёта, процент начисления, дата открытия счёта и сумма в рублях. Для представления даты использовать класс Date из задачи 4. Необходимо выполнять следующие операции: сменить владельца счёта, снять некоторую сумму денег со счёта, положить деньги на счёт, начислить проценты, перевести сумму в доллары.

Огромная просьба комментариями помочь разобраться в коде. Заранее благодарен.

Добавлено через 13 минут
И ещё не могу разобраться с ошибками при компилировании:

--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
c:\documents and settings\администратор\рабочий стол\main.cpp(53) : error C2248: 'trio' : cannot access private member declared in class 'Date'
c:\documents and settings\администратор\рабочий стол\main.cpp(25) : see declaration of 'trio'
c:\documents and settings\администратор\рабочий стол\main.cpp(53) : error C2248: 'trio' : cannot access private member declared in class 'Date'
c:\documents and settings\администратор\рабочий стол\main.cpp(25) : see declaration of 'trio'
c:\documents and settings\администратор\рабочий стол\main.cpp(53) : error C2248: 'trio' : cannot access private member declared in class 'Date'
c:\documents and settings\администратор\рабочий стол\main.cpp(25) : see declaration of 'trio'
c:\documents and settings\администратор\рабочий стол\main.cpp(53) : error C2248: 'trio' : cannot access private member declared in class 'Date'
c:\documents and settings\администратор\рабочий стол\main.cpp(25) : see declaration of 'trio'
c:\documents and settings\администратор\рабочий стол\main.cpp(53) : error C2248: 'trio' : cannot access private member declared in class 'Date'
c:\documents and settings\администратор\рабочий стол\main.cpp(25) : see declaration of 'trio'
c:\documents and settings\администратор\рабочий стол\main.cpp(133) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.

main.obj - 6 error(s), 0 warning(s)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2011, 11:15
Ответы с готовыми решениями:

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

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

6
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
28.02.2011, 12:30
Код то покажи
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
28.02.2011, 18:53
C++
1
2
3
4
5
class Date{
private:
        Trio trio;
public:
        Date();
попробуй переместить trio в public
C++
1
2
3
4
class Date{
public:
        Trio trio;
        Date();
Добавлено через 1 минуту
error C2248: 'trio' : cannot access private member declared in class 'Date'
нет доступа к защищенной переменной(private), поэтому сделай её общей(public)
1
9 / 9 / 4
Регистрация: 22.10.2009
Сообщений: 24
28.02.2011, 21:15  [ТС]
LeX BB, спасибо, ты прав, надо было public ставить.

Не знаешь как от ошибки в cout-е избавиться?(посмотрел перевод ambiguous-двусмысленный(хотя какие 2 смысла здесь могут быть?))

ValeryS,??? Код С++ вверху.

И ещё может кто-нибудь всё-таки комментариями поможет. Заранее спасибо!
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
28.02.2011, 22:01
Цитата Сообщение от Олег@tor Посмотреть сообщение
Не знаешь как от ошибки в cout-е избавиться?(посмотрел перевод ambiguous-двусмысленный(хотя какие 2 смысла здесь могут быть?))
вот тут я не селен. как говорится гугл знает все. я бы помог с поиском, да времени нет особо
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
28.02.2011, 22:48
Если ты про тот код что наверху то меня в VS2008
все компилится
есть несколько предупреждений о смешивании кодов C и C++
но программа работает
вот ее скин (не зная это ты ожидал или нет)
может дело в свойствах проекта???
Миниатюры
Реализация классов и структур  
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
28.02.2011, 23:40
Цитата Сообщение от Олег@tor Посмотреть сообщение
Не знаешь как от ошибки в cout-е избавиться?(посмотрел перевод ambiguous-двусмысленный(хотя какие 2 смысла здесь могут быть?))
Может он имел ввиду оператор сдвига << и оператор вывода <<

Добавлено через 3 минуты
хотя если нумерация строк и ошибок совпадает
cout<<surname<<" "<<number<<" "<<percent<<"% "<<date<<" "<<sum<<endl;
ничего криминального я не вижу
еще раз повторюсь у меня все компильнулось
С уважением Валерий
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.02.2011, 23:40
Помогаю со студенческими работами здесь

Различия структур и классов
Решил я понять зачем структуры в C++ нужны. Написал и оно заработало: #include &lt;iostream&gt; using namespace std; struct B { ...

Операторы классов и структур
Извините если повторяюсь с вопросом. Я не совсем понимаю суть работы операторов классов и структур - &quot;::&quot;, &quot;-&gt;&quot;,...

В чем отличия классов и структур?
Всем доброго времени суток. Уважаемые программисты, обьясните мне в чем отличия классов и структур. Учусь сам по книжкам и прочей лабуде...

Запись классов, структур в файл
Подскажите как правильно, записывать и читать данные с файла, особенно если записываются данные разных типов) Работает но как то не...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru