0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 35
|
|
1
|
Разделение объктно-ориентированного кода на файлы
29.04.2021, 14:24. Показов 980. Ответов 1
Посмотрите пожалуйста, правильно ли я разбила код по файлам. Я не совсем разбираюсь, что нужно включать в заголовочный файл .h, а что в файл .cpp.
Файл class.h:
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| #include <string>
#ifndef class_h
#define class_h
class Worker {
public: // îòêðûòàÿ ÷àñòü êëàññà
Worker(); // Êîíñòðóêòîð ïî óìîë÷àíèþ
Worker(std::string Sn, int D, int R); // Êîíñòðóêòîð ñ ïàðàìåòðàìè
~Worker(); // Äåñòðóêòîð
void SetSoname(std::string);// Ìåòîä, óñòàíàâëèâàþùèé íîâîå çíà÷åíèå ñâîéñòâó Soname, îòêðûòûé äîñòóï
void SetDays(int); // Ìåòîä, óñòàíàâëèâàþùèé íîâîå çíà÷åíèå ñâîéñòâó Days, îòêðûòûé äîñòóï
void SetRate(int); // Ìåòîä, óñòàíàâëèâàþùèé íîâîå çíà÷åíèå ñâîéñòâó Rate, îòêðûòûé äîñòóï
std::string GetSoname(); // Ìåòîä, ïîçâîëÿþùèé ïðî÷èòàòü çíà÷åíèå ñâîéñòâà Soname, îòêðûòûé äîñòóï
int GetDays(); // Ìåòîä, ïîçâîëÿþùèé ïðî÷èòàòü çíà÷åíèå ñâîéñòâà Days, îòêðûòûé äîñòóï
int GetRate(); // Ìåòîä, ïîçâîëÿþùèé ïðî÷èòàòü çíà÷åíèå ñâîéñòâà Rate, îòêðûòûé äîñòóï
private:// çàêðûòàÿ ÷àñòü êëàññà
std::string Soname; // ôàìèëèÿ, çàêðûòûé äîñòóï
int Days; // êîë-âî îòðàáîòàííûõ äíåé, çàêðûòûé äîñòóï
int Rate; // òàðèô, çàêðûòûé äîñòóï
};
int CalculateSum(); // Ôóíêöèÿ âû÷èñëåíèÿ ñóììû çàðàáîòíîé ïëàòû
#endif |
|
Файл class.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
| #include "class.h"
Worker::Worker() { } // Конструктор по умолчанию
Worker::Worker(std::string Sn, int D, int R) // конструктор с параметрами
{
Soname = Sn;
Days = D;
Rate = R;
}
Worker::~Worker() // Деструктор
{
}
void Worker::SetSoname(std::string Son) { Soname = Son; } // Метод, устанавливающий новое значение свойству Soname
void Worker::SetDays(int D) { Days = D; } // Метод, устанавливающий новое значение свойству Days
void Worker::SetRate(int R) { Rate = R; } // Метод, устанавливающий новое значение свойству Rate
std::string Worker::GetSoname() // Метод, позволяющий прочитать значение свойства Soname
{
return Soname;
}
int Worker::GetDays() // Метод, позволяющий прочитать значение свойства Days
{
return Days;
}
int Worker::GetRate() // Метод, позволяющий прочитать значение свойства Rate
{
return Rate;
} |
|
Файл main.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
| #include <iostream>
#include "class.h"
Worker workers[4]; // Ñîçäàíèå ìàññèâà îáúåêòîâ
int main(int argc, char** argv) {
std::string Sn;
int D;
int R;
setlocale(LC_ALL,"Russian"); // Ôóíêöèÿ äëÿ ïðàâèëüíîãî îòîáðàæåíèÿ êèðèëëèöû
// Ñîçäàíèå îáúåêòà ñ ïîìîùüþ êîíñòðóêòîðà ïî óìîë÷àíèþ
Worker w1;
// Cîçäàíèå îáúåêòà ñ ïîìîùüþ êîíñòðóêòîðà ñ ïàðàìåòðàìè
Worker w2("Ivanov", 25, 900);
// Èíèöèàëèçàöèÿ ñâîéñòâ êàæäîãî îáúåêòà ìàññèâà
std::cout << "Ââåäèòå äàííûå â ìàññèâ\n";
for(int i=0;i<4;i++)
{
std::cout << "Ðàáîòíèê ¹" << i+1 << "\n";
std::cout << "Ôàìèëèÿ: ";
std::cin >> Sn; // Ââîä ôàìèëèè
workers[i].SetSoname(Sn);
std::cout << "Êîëè÷åñòâî îòðàáîòàííûõ äíåé: ";
std::cin >> D; // Ââîä êîë-âà äíåé
workers[i].SetDays(D);
std::cout << "Òàðèô: ";
std::cin >> R; // Ââîä òàðèôà
workers[i].SetRate(R);
}
// Ïðîñìîòð ñâîéñòâ êàæäîãî îáúåêòà
for(int i=0;i<4;i++)
{
std::cout << "Ðàáîòíèê ¹" << i+1 << "\n";
std::cout << "Ôàìèëèÿ: " << workers[i].GetSoname() << ", ";
std::cout << "Êîë-âî îòðàáîòàííûõ äíåé: " << workers[i].GetDays() << ", ";
std::cout << "Òàðèô: " << workers[i].GetRate() << "\n";
}
std::cout << CalculateSum(); // Âûâîä âû÷èñëåííîé ñóììû
return 0;
}
// Ôóíêöèÿ âû÷èñëåíèÿ ñóììû çàðàáîòíîé ïëàòû
int CalculateSum()
{
int sum=0;
for(int i=0;i<4;i++)
{
sum=sum+workers[i].GetDays()*workers[i].GetRate();
}
return sum;
} |
|
Правильно ли я подключаю файлы? Не совсем понимаю, почему нужно указывать std:: перед string, ведь я уже подключила файл #include <string>. Правильно ли, что я class.h подключаю 2 раза: в файле class.cpp и в файле main.cpp?
0
|