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

Классы с++. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамическое распределение памяти в функции и его возврат http://www.cyberforum.ru/cpp-beginners/thread448663.html
Обычно в курсах изложен вопрос о передаче 1- или 2-мерного массива в функцию. Не менее важно иногда вернуть результат в вызывающую программу. Что, неужели всегда надо выделять память для такого массива до передачи в функцию? код #include <iostream> #include <conio> void vvod(int **a , int n , int m) { a=new int*;
C++ Как это сделать ? [c++] Вот допустим у меня есть функция inline void fun(char* аргумент1, char *аргумент2) и есть 2 функция fun("аргумент1 ", переменая1); вопрос: http://www.cyberforum.ru/cpp-beginners/thread448654.html
C++ Рассчитать стоимость квартиры
Квадратный метр площади в строящемся доме, стоит 270 у.е. (курс НБУ). Стоимость квартиры С определяется по формуле: С=ВК*П*К, где ВК - стоимость 1 кв. метра площади, П - площадь квартиры, К - коэффициент, алгоритм определения которого следующий: 1-3 или 13-14 этажа - К = 1; 4-7 этажи - К = 2,5; 8-9 этажи - К = 1, 8; 10-12 этажи - К = 1,5. Рассчитать стоимость квартиры (в гривнях), если известны...
составить программу для вычисления функции C++
функция \begin{cases} & \text {lg}^{3} x+{x}^{2}\\ & \text \sqrt{x+t}+1/x \\ & \text cosx+t{sin}^{2}x \end{cases} Условие |x|>a |x|=a |x|<a Начальные данные
C++ Преобразование информции из текстового файла в двумерный массив http://www.cyberforum.ru/cpp-beginners/thread448650.html
Есть такая задачка В visual studio 2008 на С++ нужно рассчитать кратчайший путь от точки к точке в лабиринте. Лабиринт задается в текстовом файле, где ####- границы, пробелы - свободные клетки, а буквы А и В - начало и конец соответственно. Кратчайший путь заполняется точками. Хочу применить волновой алгоритм, но в текстовом файле... Вот и главный вопрос: если я могу в горизонтальной строке...
C++ Рандом растет srand(time(0)); int j=rand()%1000; char s="afasfa"; switch (message) /* handle the messages */ { case WM_DESTROY: {PostQuitMessage (0); KillTimer(hwnd,ID_TIMER); } /* send a WM_QUIT to the message queue */ break; case WM_TIMER: подробнее

Показать сообщение отдельно
miriganua
130 / 101 / 4
Регистрация: 05.02.2012
Сообщений: 241
19.02.2012, 03:02     Классы с++.
Тина_Ливингстон, я попытался написать код, следуя условию задания. В его правильности не уверен, ведь сам только начал(1 курс) учить С++, хотя я его проверил, втоде правильно. Сделал все задания кроме унарного -(не знаю что имеется в виду). Не стал писать программу для тестирования, считаю, что лучше вам это сделать самим, по пути разберетесь в моих каракулях и может найдете ошибки. Код:

заголовочный файл с объявлением класса (у меня "classEnglishMoney.h")
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
#ifndef classEnglishMoney_h
#define classEnglishMoney_h
 
class EnglishMoney
{
    //классы для обработки исключений
    class BadData { };
private:
    int pound;
    int shilling;
    int pence;
public:
    //конструктор
    EnglishMoney(int countOfPound, int countOfShilling, int countOfPence);
    //конструктора по умолчанию
    EnglishMoney();
    //конструктора копирования
    EnglishMoney(const EnglishMoney& money);
 
 
    //проверка в операторах
    void checkResult();
 
 
    //распределение после
    void distributionAfter();
    //распределение до
    void distributionBefore();
 
    
    //оператора присваивания
    EnglishMoney& operator=(const EnglishMoney& money);
    //операция +=
    EnglishMoney& operator+=(const EnglishMoney& money);
    //операция -=
    EnglishMoney& EnglishMoney::operator-=(const EnglishMoney& money);
    
    
    //операция +
    EnglishMoney operator+(const EnglishMoney& money);
    //операция -
    EnglishMoney operator-(const EnglishMoney& money);
    
 
    //оператор ==
    bool operator==(const EnglishMoney& money);
    //оператор <
    bool operator<(const EnglishMoney& money);
 
 
    //вывод на консоль денежной суммы
    void showMoney();
};
 
#endif

файл реализации (у меня "classEnglishMoney.cpp")
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
#include <iostream>
#include "classEnglishMoney.h"
 
//конструктор
EnglishMoney::EnglishMoney(int countOfPound, int countOfShilling, int countOfPence)
{
    if (countOfPound < 0 || countOfShilling < 0 || countOfPence < 0 || countOfPound > 1000000000 || countOfShilling > 20 || countOfPence > 12)
    {
        throw BadData();
    }
    pound = countOfPound;
    shilling = countOfShilling;
    pence = countOfPence;
}
//конструктора по умолчанию
EnglishMoney::EnglishMoney()
{
    pound = 0;
    shilling = 0;
    pence = 0;
}
//конструктора копирования
EnglishMoney::EnglishMoney(const EnglishMoney& money)
{
    pound = money.pound;
    shilling = money.shilling;
    pence = money.pence;
}
 
 
//проверка в операторах
void EnglishMoney::checkResult()
{
    if (pound < 0 || shilling < 0 || pence < 0 || pound > 1000000000 || shilling > 20 || pence > 12)
    {
        throw BadData();
    }
}
 
 
//распределение после
void EnglishMoney::distributionAfter()
{
    if (pence >= 12)
    {
        pence = pence % 12;
        shilling++;
    }
    if (shilling >= 20)
    {
        shilling = shilling % 20;
        pound++;
    }
}
//распределение до
void EnglishMoney::distributionBefore()
{
    if (pound != 0)
    {
        pound--;
        shilling += 20;
    }
    if (shilling != 0)
    {
        shilling--;
        pence += 12;
    }
}
 
 
//оператора присваивания
EnglishMoney& EnglishMoney::operator=(const EnglishMoney& money)
{
    pound = money.pound;
    shilling = money.shilling;
    pence = money.pence;
    return *this;
}
//операция +=
EnglishMoney& EnglishMoney::operator+=(const EnglishMoney& money)
{
    pound += money.pound;
    shilling += money.shilling;
    pence += money.pence;
    distributionAfter();
    checkResult();
    return *this;
}
//операция -=
EnglishMoney& EnglishMoney::operator-=(const EnglishMoney& money)
{
    distributionBefore();
    pound -= money.pound;
    shilling -= money.shilling;
    pence -= money.pence;
    distributionAfter();
    checkResult();
    return *this;
}
 
 
//операция +
EnglishMoney EnglishMoney::operator+(const EnglishMoney& money)
{
    EnglishMoney newMoney;
    newMoney.pound = pound + money.pound;
    newMoney.shilling = shilling + money.shilling;
    newMoney.pence = pence + money.pence;
    newMoney.distributionAfter();
    newMoney.checkResult();
    return newMoney;
}
//операция -
EnglishMoney EnglishMoney::operator-(const EnglishMoney& money)
{
    EnglishMoney newMoney;
    distributionBefore();
    newMoney.pound = pound - money.pound;
    newMoney.shilling = shilling - money.shilling;
    newMoney.pence = pence - money.pence;
    distributionAfter();
    newMoney.distributionAfter();
    newMoney.checkResult();
    return newMoney;
}
 
 
 
//оператор ==
bool EnglishMoney::operator==(const EnglishMoney& money)
{
    if(pound != money.pound || shilling != money.shilling || pence != money.pence)
    {
        return false;
    }
    return true;
}
//оператор <
bool EnglishMoney::operator<(const EnglishMoney& money)
{
    if(pound < money.pound)
    {
        return true;
    }
    if(pound == money.pound && shilling < money.shilling)
    {
        return true;
    }
    if(pound == money.pound && shilling == money.shilling && pence < money.pence)
    {
        return true;
    }
    return false;
}
 
 
//вывод на консоль денежной суммы
void EnglishMoney::showMoney()
{
    std::cout << pound << "pd." << shilling << "sh." << pence << "p.";
}

файл программы, только наброски (у меня "Testing of the class.cpp")
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include "classEnglishMoney.h"
 
int main()
{
    try
    {
        EnglishMoney a1;
        EnglishMoney a2(1, 10, 5);
        EnglishMoney a4(2, 10, 4);
        EnglishMoney a3(a2);
        (a2 - a4).showMoney();
        return 0;
    }
    catch(EnglishMoney::BadData)
    {
        std::cout << "Programm obtains bad data. Programm stops. Try to check programm." << '\n';
    }
}
Возникнут вопросы пишите.
 
Текущее время: 01:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru