С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.12.2020
Сообщений: 35
1

Разделение объктно-ориентированного кода на файлы

29.04.2021, 14:24. Показов 980. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Посмотрите пожалуйста, правильно ли я разбила код по файлам. Я не совсем разбираюсь, что нужно включать в заголовочный файл .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
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2021, 14:24
Ответы с готовыми решениями:

Разделение кода на cpp и h файлы
Добрый день. Расскажите, пожалуйста, как разделить код на два файла cpp и файл h. #include...

Разделение кода программы на файлы
Добрый вечер! Мне нужно сделать mdi приложение на winapi. Подскажите, пожалуйста, как разбить...

Разделение кода программы на файлы
Добрый вечер, Заранее извиняюсь, если это тема уже где-то подымалась на форуму. Тогда просто...

Разделение отчета на отдельные файлы PDF-файлы
Доброй ночи форумчане! Просьба помочь в решении задачи. Есть простая база, данные в которую...

1
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
29.04.2021, 15:35 2
Лучший ответ Сообщение было отмечено Aloisa как решение

Решение

Цитата Сообщение от Aloisa Посмотреть сообщение
Правильно ли я подключаю файлы? Не совсем понимаю, почему нужно указывать std:: перед string, ведь я уже подключила файл #include <string>. Правильно ли, что я class.h подключаю 2 раза: в файле class.cpp и в файле main.cpp?
Цитата Сообщение от Aloisa Посмотреть сообщение
#include <string>
#ifndef class_h
#define class_h
class Worker {
Лучше чтобы всё было внутри #ifndef/#define
C++
1
2
3
4
5
6
#ifndef class_h
#define class_h
 
#include <string>
 
class Worker {
Добавлено через 40 секунд
А так - нормально

Добавлено через 2 минуты
Цитата Сообщение от Aloisa Посмотреть сообщение
Не совсем понимаю, почему нужно указывать std:: перед string, ведь я уже подключила файл #include <string>.
std:: это пространство имён, т.е., можно сказать - часть имени класса. Подключение заголовков на это никак не влияет

Добавлено через 52 секунды
Здесь это работает не так, как в си-шарпе
1
29.04.2021, 15:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2021, 15:35
Помогаю со студенческими работами здесь

Объктно-ориентированное программирование. С++
здравствуйте уважаемые программисты :) в универе задали решить задачки, если будет не трудно,...

Объктно Ориентированое Программирование в VB.NET
Подскажите или помогите каким нибудь образом найти доку по ООП в VB.net Перешел с 6-й версии на...

Разделение на файлы
Может кто-то объяснить как разделять код на файлы? (я так понял нужно создать заглавный файл ****.h...

Разделение на файлы
Здравствуйте, друзья! не подскажите почему у меня ругается, когда прогу делю на файлы. Вот куски: ...

Разделение кода
Допустим у меня есть файл config.php и как его разделить на части, например прописываю путь...

Разделение программы на файлы
Всем привет. Изучаю алгоритмы сортировки. Вот что уже написал: //sort.cpp #include &quot;sort.h&quot;...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru