Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114

Прошу оценить стиль программы

14.02.2019, 17:16. Показов 4906. Ответов 73

Студворк — интернет-сервис помощи студентам
Всем мира!
Ребят, в общем наваял я тут чудо-чудное, диво-дивное (мне так кажется)
Прошу, чтоб посмотрели код, посоветовали, что можно исправить, что добавить, как короче можно написать, как логичней ну и т.д. В общем взглянуть на программу сторонними разбирающимися глазами

Программа реализует Зоомагазин, который периодически на просторах киберфорума встречается. Присутствуют функции добавления, редактирования, удаления, отображения БД(если это можно так назвать (да простит меня Нео)...), а также записи всего этого добра в файл и чтение из него.

Я не студент, это не моя курсовая, экзамен и т.д. Я не оказываю кому-либо медвежью или финансовую услугу. Я самоучка стремящийся к Зеленому Бегущему Свету

Сначала я кину .h, затем .cpp

Если нужно кину на почту .zip с проектом (среда VS 2017)!

Спасибо!

pch.h - основной заголовок.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef PCH_H
#define PCH_H
#include <iostream>
#include <fstream>
#include <ios>
#include <vector>
#include <iomanip>
#include <cstring>
#include <map>
#include <conio.h>
#include <windows.h>
int menu();
#endif
Class.h - заголовок класса petshopБ в котором реализуются все звери
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
#pragma once
#include <fstream>
 
class petshop {
    char animal[20];
    char name[20];
    char gender[7];
    int cost;
    int count;
public:
    petshop();
    petshop(const petshop &ob);
    void set_name();
    void set_animal();
    void set_gender();
    void set_cost();
    void set_count();
    void show_sample();
    char *get_animal();
    char *get_name();
    char *get_gender();
    int *get_cost();
    int *get_count();
    petshop operator=(petshop ob);
    friend std::ostream &operator<<(std::ostream &stream, const petshop ob);
    friend std::istream &operator>>(std::istream &stream, petshop &ob);
    ~petshop();
};
draw.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
#pragma once
#include "Class.h"
enum ConsoleColor
{
    Black = 0,
    Blue = 1,
    Green = 2,
    Cyan = 3,
    Red = 4,
    Magenta = 5,
    Brown = 6,
    LightGray = 7,
    DarkGray = 8,
    LightBlue = 9,
    LightGreen = 10,
    LightCyan = 11,
    LightRed = 12,
    LightMagenta = 13,
    Yellow = 14,
    White = 15
};
 
void draw(const char str[15]);
void draw(petshop ob);
update.h - заголовок функционала редактирования зверей в магазине
C++
1
2
3
4
5
6
7
8
9
#include "Class.h"
#include <vector>
 
#ifndef UPDATE
#define UPDATE
int menu_update();
int choose_animal(std::vector<petshop> &v);
void update_animal(std::vector <petshop> &v);
#endif
remove.h - заголовок функционала удаления зверей
C++
1
2
3
4
5
6
7
8
#include "Class.h"
#include <vector>
 
#ifndef REMOVE
#define REMOVE
void remove_animal(std::vector<petshop> &v);
int choose_animal2(std::vector<petshop> &v);
#endif
write_file.h - заголовок функции записи БД в файл
C++
1
2
3
4
#pragma once
#include "Class.h"
#include <vector>
void write_to_file (std::vector<petshop> &v);
read_file.h - заголовок функции чтения данных из файла и переноса данных в БД
C++
1
2
3
4
#pragma once
#include "Class.h"
#include <vector>
void read_from_file(std::vector<petshop> &v);





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
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
#include "pch.h"
#include "draw.h"
#include "Class.h"
#include "update.h"
#include "remove.h"
#include "write_file.h"
#include "read_file.h"
#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;
 
int main()
{
    int answer;
    char r1[20];
    vector <petshop> v;
    v.reserve(1000);
    petshop *s;
    int i;
 
    for (;;) {
        answer = menu();
        switch (answer)
        {
        case 0: {
            s = new petshop;
            s->set_animal();
            s->set_name();
            s->set_gender();
            s->set_cost();
            s->set_count();
            v.emplace_back(*s);
            delete s;
            break;
        }
        case 1: {
            for (i = 0; i < v.size(); i++) {
                v[i].show_sample();
            }
            cin.get();
            break;
        }
        case 2: {
            update_animal(v);
            break;
        }
        case 3: {
            remove_animal(v);
            break;
        }
        case 4: {
            write_to_file(v);
            break;
        }
        case 5: {
            read_from_file(v);
            break;
        }
        case 6: {
            return 0;
        }
        }
    }
}
    
int menu()
    {
    static int key = 0;
    int code;
    do {
        system("cls");
        if (key == 0) draw("Add animal");
        else cout << "Add animal\n";
        if (key == 1) draw("Display");
        else cout << "Display\n";
        if (key == 2) draw("Update animal");
        else cout << "Update animal\n";
        if (key == 3) draw("Remove animal");
        else cout << "Remove animal\n";
        if (key == 4) draw("Write to file");
        else cout << "Write to file\n";
        if (key == 5) draw("Read file");
        else cout << "Read file\n";
        if (key == 6) draw("Close program");
        else cout << "Close program\n";
        cout << endl;
            if (key == key)
        {
            code = getch();
            if (code == 80) {
                key++;
                if (key == 7) key = 0;
            }
            if (code == 72) {
                key--;
                if (key == -1) key = 6;
            }
        }
    } while (code != 13);
    return key;
}
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
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
#include "pch.h"
#include "Class.h"
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
 
petshop::petshop()
{
    strcpy(animal, "");
    strcpy(name, "");
    strcpy(gender, "");
    cost = 0;
    count = 0;
}
 
petshop::petshop(const petshop &ob)
{
    strcpy(this->animal, ob.animal);
    strcpy(this->name, ob.name);
    strcpy(this->gender, ob.gender);
    cost = ob.cost;
    count = ob.count;
}
 
void petshop::set_animal() {
    char r1[20];
    cout << "What kind of animal you want to write?\n";
    cin >> r1;
    strcpy(animal, r1);
}
 
void petshop::set_name() {
    char r1[20];
    cout << "What name you want to write?\n";
    cin >> r1;
    strcpy(name, r1);
}
 
void petshop::set_gender() {
    char r1[20];
    cout << "What gender do the animal have?\n";
    cin >> r1;
    strcpy(gender, r1);
}
 
void petshop::set_cost() {
    int a;
    cout << "What is the cost of the animal?\n";
    cin >> a;
    cost = a;
}
 
void petshop::set_count() {
    int a;
    cout << "How many animals of that type?";
    cin >> a;
    count = a;
}
 
void petshop::show_sample()
{
    cout << "Animal: " << this->animal << '\n';
    cout << "Name: " << this->name << '\n';
    cout << "Gender: " << this->gender << '\n';
    cout << "Cost: " << this->cost << '$' << '\n';
    cout << "Count: " << this->count << '\n';
}
 
char *petshop::get_animal() 
{
    return animal; 
}
 
char *petshop::get_name()
{
    return name;
}
 
char *petshop::get_gender()
{
    return gender;
}
 
int *petshop::get_cost()
{
    return &cost;
}
 
int *petshop::get_count()
{
    return &count;
}
 
petshop::~petshop()
{
}
 
 
petshop petshop::operator=(petshop ob)
{
    strcpy(this->animal, ob.animal);
    strcpy(this->name, ob.name);
    strcpy(this->gender, ob.gender);
    cost = ob.cost;
    count = ob.count;
    return *this;
}
 
ostream &operator<<(ostream &stream, petshop obj) 
{
    stream << obj.animal << '\n';
    stream << obj.name << '\n';
    stream << obj.gender << '\n';
    stream << obj.cost << '\n';
    stream << obj.count << "\n\n";
 
    return stream;
}
 
istream &operator>>(istream &stream, petshop &obj)
{
    stream >> obj.animal;
    stream >> obj.name;
    stream >> obj.gender;
    stream >> obj.cost;
    stream >> obj.count;
 
    return stream;
}
draw.cpp - описание раскраски активной строки меню
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "pch.h"
#include "draw.h"
#include "Class.h"
#include <windows.h>
#include <iostream>
using namespace std;
 
void draw(const char str[15])
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((Black << 4) | LightMagenta));
    cout << str << '\n';
    SetConsoleTextAttribute(hStdOut, (WORD)((Black << 4) | LightGray));
}
 
void draw(petshop ob)
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((Black << 4) | LightMagenta));
    ob.show_sample();
    SetConsoleTextAttribute(hStdOut, (WORD)((Black << 4) | LightGray));
}
update.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
#include "pch.h"
#include "update.h"
#include "draw.h"
#include "Class.h"
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
 
void update_animal(vector<petshop> &v)
{
    int i;
    if (v.empty()) {
        cout << "There is no animals in database...";
        cin.get();
        return;
    }
    int choose;
    choose = choose_animal(v);
    if (choose == v.size()) return;
    int answer2;
    for (;;) {
        answer2 = menu_update();
        switch(answer2)
        {
        case 0: 
        {
            v[choose].set_animal();
            cout << "Type successfully changed!";
            break;
        }
        case 1: 
        {
            v[choose].set_name();
            cout << "Name successfully changed!";
            break;
        }
        case 2:
        {
            v[choose].set_gender();
            cout << "Gender successfully changed!";
            break;
        }
        case 3:
        {
            v[choose].set_cost();
            cout << "Type successfully changed!";
            break;
        }
        case 4:
        {
            v[choose].set_count();
            cout << "Count successfully changed!";
            break;
        }
        case 5:
        {
            return;
        }
        }
    }
 
}
 
int menu_update()
{
    static int key2 = 0;
    int code2;
    do {
        system("cls");
        if (key2 == 0) draw("Animal type");
        else cout << "Animal type\n";
        if (key2 == 1) draw("Animal name");
        else cout << "Animal name\n";
        if (key2 == 2) draw("Animal gender");
        else cout << "Animal gender\n";
        if (key2 == 3) draw("Animal cost");
        else cout << "Animal cost\n";
        if (key2 == 4) draw("Animal count");
        else cout << "Animal count\n";
        if (key2 == 5) draw("Back to Main menu");
        else cout << "Back to Main menu\n";
        cout << endl;
 
        if (key2 == key2)
        {
            code2 = getch();
            if (code2 == 80) {
                key2++;
                if (key2 == 6) key2 = 0;
            }
            if (code2 == 72) {
                key2--;
                if (key2 == -1) key2 = 5;
            }
        }
    } while (code2 != 13);
    return key2;
}
 
int choose_animal(vector<petshop> &v)
{
    int i;
    static int key3 = 0;
    int code3;
    do {
        system("cls");
        for (i = 0; i < v.size(); i++) {
            if (key3 == i) draw(v[i]);
            else v[i].show_sample();
        }
        if (key3 == v.size()) draw("Back to Main menu");
        else cout << "Back to Main menu\n";
        cout << endl;
 
        if (key3 == key3)
        {
            code3 = getch();
            if (code3 == 80) {
                key3++;
                if (key3 == v.size()+1) key3 = 0;
            }
            if (code3 == 72) {
                key3--;
                if (key3 == -1) key3 = v.size();
            }
        }
    } while (code3 != 13);
    return key3;
}
remove.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
#include "pch.h"
#include "draw.h"
#include "Class.h"
#include "remove.h"
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;
 
void remove_animal(vector<petshop> &v)
{
    int i;
    if (v.empty()) {
        cout << "There is no animals in database...";
        cin.get();
        return;
    }
    int choose2;
    choose2 = choose_animal2(v);
    if (choose2 == v.size()) return;
    v.erase(v.begin()+choose2);
}
 
int choose_animal2(vector<petshop> &v)
{
    int i;
    static int key3 = 0;
    int code3;
    do {
        system("cls");
        for (i = 0; i < v.size(); i++) {
            if (key3 == i) draw(v[i]);
            else v[i].show_sample();
        }
        if (key3 == v.size()) draw("Back to Main menu");
        else cout << "Back to Main menu\n";
        cout << endl;
 
        if (key3 == key3)
        {
            code3 = getch();
            if (code3 == 80) {
                key3++;
                if (key3 == v.size() + 1) key3 = 0;
            }
            if (code3 == 72) {
                key3--;
                if (key3 == -1) key3 = v.size();
            }
        }
    } while (code3 != 13);
    return key3;
}
write_file.cpp - описание записи БД в файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "pch.h"
#include "write_file.h"
#include <fstream>
#include <iostream>
 
using namespace std;
 
void write_to_file(std::vector<petshop> &v)
{
    ofstream tofile("animals.bin", ios::trunc | ios::binary);
    int i;
    if (!tofile.is_open()) {
        cout << "File is not found!";
        return;
    }
 
    for (i = 0; i < v.size(); i++) {
        tofile << v[i];
    }
 
    tofile.close();
}
read_file.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
#include "pch.h"
#include "read_file.h"
#include <fstream>
#include <iostream>
 
using namespace std;
 
void read_from_file(std::vector<petshop> &v)
{
    ifstream fromfile("animals.bin", ios::binary | ios::out);
    int i;
    if (!fromfile.is_open()) {
        cout << "File is not found!";
        return;
    }
    petshop *s = new petshop;
 
    while (!fromfile.eof()) {
        fromfile >> s->get_animal();
        fromfile >> s->get_name();
        fromfile >> s->get_gender();
        fromfile >> *s->get_cost();
        fromfile >> *s->get_count();
        v.emplace_back(*s);
    }
    fromfile.close();
}

Такая вот программка. Жду отзывов и критики!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2019, 17:16
Ответы с готовыми решениями:

Прошу оценить код на C++
Сильно не пинайте, только начал изучать C++, написал вот такое кот. Что не так в этом коде? Перечислите, какие есть недостатки. Предложите...

Прошу оценить свой уровень
Код во вложениях

Калькулятор для начинающих, прошу оценить
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int menu (); int sum (); int razn (); int vozved (); int delen...

73
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
14.02.2019, 21:39  [ТС]
Студворк — интернет-сервис помощи студентам
_stanislav, а точно. Насчет istream'а согласен. А вот насчет
C++
1
2
3
4
while (!fromfile.eof()) {
        fromfile >> s;
        v.emplace_back(s);
    }
Разве он не один объект мне создаст? Или типа он, пока будут содержаться строки в файле, будет их последовательно записывать, автоматически создавая новые объекты, если полей в предыдущих объектах будет не хватать для вмещения всех данных из потока?

З.Ы. Посмотри, пожалуйста параметры создания объектов ofstream и ifstream. Я вот сколько после прочтения ряда топиков и учебника по С++ пришел к выводу, что методы класса ios желательно всегда указывать, в частности, всегда производить запись и чтение задавая формат ios::binary...
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
15.02.2019, 11:31
Цитата Сообщение от Руслан92 Посмотреть сообщение
Разве он не один объект мне создаст?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// тут идет перезапись полей класса, потом перезаписанный объект копируется в вектор
istream &operator>>(istream &stream, petshop &obj)
{
    stream >> obj.animal;
    stream >> obj.name;
    stream >> obj.gender;
    stream >> obj.cost;
    stream >> obj.count;
 
    return stream;
}
 
petshop s; // да, создаем объект на стеке
 
while (!fromfile.eof()) {
    fromfile >> s; // вызов перегруженной операции >>
    v.emplace_back(s); //копируем объект в вектор
}
Добавлено через 6 минут
Цитата Сообщение от Руслан92 Посмотреть сообщение
чтение задавая формат ios::binary
не помню, вроде при чтении с помощью операции >> разницы нет
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 11:36  [ТС]
_stanislav, отлично! Все получилось. Но осталась проблемка, которая была и с прошлым вариантом. Создание какого-то объекта при чтении .bin. Последний объект имеет поля cost и count, причем такие же как у предыдущего объекта, а остальные поля пустые...?
Посмотрел функции read и write свои...вроде все правильно написано...
Миниатюры
Прошу оценить стиль программы   Прошу оценить стиль программы  
0
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 11:39  [ТС]
Смысл такой, что я при открытии программы сразу считываю в пустой вектор .bin (сделано для того, чтоб не заполнять каждый раз вектор, а работать с уже сохраненными объектами путем его записи и последующего чтения).
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 11:40
Цитата Сообщение от golatin Посмотреть сообщение
классы с большой буквы PetShop
Бред, с чего вдруг?
Цитата Сообщение от golatin Посмотреть сообщение
Все, что в enum лучше писать большими буквами BLACK, BLUE, GREEN и т.д.
Бред..
Цитата Сообщение от golatin Посмотреть сообщение
Что за магическое число 15? Используйте или #define или const
Этого там вообще не должно быть, это ничего не меняет..
Цитата Сообщение от golatin Посмотреть сообщение
Замените на MY_UPDATE, MY_REMOVE
Это еще хуже
Цитата Сообщение от XLAT Посмотреть сообщение
переменуйте в cPet.h
Префикс 'c' к названию класса - ужас, не дай бог на продакшене будете так делать..
2
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
15.02.2019, 11:49
Руслан92, ты почитай про стандартный ввод вывод, как работают какие операции все станет ясно, я конкретно не помню как там все, а смотреть документацию что бы тебе объяснять не хочу, ты уж извини.
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 11:49  [ТС]
Azazel-San, скажите тогда свои рекомендации или замечания по коду, если не сложно. Расскажите, что нужно изменить, чтоб привить себе правильный стиль написания программ. Может моветон пользоваться какими-то оборотами или функциями?...
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
15.02.2019, 11:51
Цитата Сообщение от Руслан92 Посмотреть сообщение
скажите тогда свои рекомендации или замечания по коду, если не сложно. Расскажите, что нужно изменить, чтоб привить себе правильный стиль написания программ
главное правило которое меня не когда не подводит, что в жизни что в коде должно быть просто и понятно. отталкивайся от этого при кодировании, и все будет у тебя, тут тебе накидать могут все что угодно, у каждого свой стиль, так что не парься.
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 11:56  [ТС]
_stanislav, все решилось. Странно, но имея даже одну пустую строку в .bin после последнего данного об объекте, он так вот считывал последние данные в вектор. Исправил вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (i = 0; i < v.size(); ++i) {
        tofile << v[i].get_animal() << '\n';
        tofile << v[i].get_name() << '\n';
        tofile << v[i].get_gender() << '\n';
        tofile << v[i].get_cost() << '\n';
        if (i == v.size() - 1) // вот здесь новая конструкция для исключения постановки переноса строки на последнем пункте
        {                           // последнего объекта
            tofile << v[i].get_count();
            break;
        }
        tofile << v[i].get_count() << '\n';
    }
Добавлено через 4 минуты
главное правило которое меня не когда не подводит, что в жизни что в коде должно быть просто и понятно. отталкивайся от этого при кодировании, и все будет у тебя, тут тебе накидать могут все что угодно, у каждого свой стиль, так что не парься.
_stanislav, т.е. мне никаких правок не вносить в прогу? Или есть что все-таки доработать? Есть места, которые я сам допилить хочу, но может что-то я пропустил по неопытности или по не знанию
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 11:57
Руслан92, если вы новичек все у вас нормально +/- по классам, на парьтесь над названием классов, это все не имеет значения, придете на проект и вам дадут стиль форматирования кода и от проекта к проекту он будет менятся)
По поповоду логики программы (корректности работы) справшивайте, помогут подправить.

Уберите отовсюду using namespace std; - и забудьте о этом. Далее что-то большее описывать не вижу смысла, вам придется тогда переписать половину проекта
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 12:17  [ТС]
Azazel-San, если уж позволили поспрашивать то давайте. Вопросы есть:
1) Нужно ли реально такое разбиение на .сpp файлы и нужно ли каждому из них отдельный заголовочный файл?

2) Почему при подключении pch.h, в котором я в принципе указал все нужные библиотеки для работы программы, мне все-таки в каждом .cpp нужно указывать дополнительно подключаемые библиотеки?

3) Разве я не могу using namespace std; внутри .cpp файла писать. Это вроде (по крайней мере как я читал) хреново только если ты указываешь эту строку в .h?

4) в вектор все-таки помещается копия объекта или объект? Если копия, то где оригиналы хранятся? Хотелось бы, конечно, без копий работать, и вроде как emplace_back(), в отличие от push_back() это и должен делать, но у меня почему то не делает...Узнал об этом через контрольные cout'ы в конструкторе копии и обычном.

5) Меню меня слегка смущает, точнее его работа с draw() и его реализация перемещения по меню при помощи key1, key2, key3.

6) С классом проблем не вижу... о каких +\- Вы написали?
Функции int* get_cost() и int* get_count() я переписал, выше написано почему я был вынужден так делать и как мне помогли это решить.
Чего еще не хватает в классе? Или сама форма его оставляет желать лучшего?

7) Ну и вопрос про ios::binary и ios::in и ios::out - насколько они вообще нужны? И что сильно поменяется если их не станет. Сколько не читал литературы и топиков, единственное что понял, что ios::binary записывает и считывает все, включая символы табуляции. Только в этом его прелесть или есть какой-то важный момент, который я не знаю или не догоняю?

Добавлено через 1 минуту
Далее что-то большее описывать не вижу смысла, вам придется тогда переписать половину проекта
Не вижу ничего страшного. Это учебный проект, цель которого одна - научиться чему-либо. Просто конструктор Лего) Мне его не сдавать и сроков у меня нет) Главное, чтоб если исправлять что-то, то действительно на пользу и это реально поможет прокачать себя как профессионала. А хотелки...это просто хотелки. Короче, если реально что-то по существу, то я переделаю.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 12:36
Цитата Сообщение от Руслан92 Посмотреть сообщение
1) Нужно ли реально такое разбиение на .сpp файлы и нужно ли каждому из них отдельный заголовочный файл?
Если у вас не шаблонный класс, то да - .cpp желателен.
Цитата Сообщение от Руслан92 Посмотреть сообщение
2) Почему при подключении pch.h, в котором я в принципе указал все нужные библиотеки для работы программы, мне все-таки в каждом .cpp нужно указывать дополнительно подключаемые библиотеки?
pch.h - это предкомпилированный заголовок созданный VS, выкиньте его он вам не нужен, у вас в проекте нету +100500 файлов и разницы в скорости сборки вы не увидите.
Цитата Сообщение от Руслан92 Посмотреть сообщение
3) Разве я не могу using namespace std; внутри .cpp файла писать. Это вроде (по крайней мере как я читал) хреново только если ты указываешь эту строку в .h?
Не стоит это довольно плохой тон.
Цитата Сообщение от Руслан92 Посмотреть сообщение
4) в вектор все-таки помещается копия объекта или объект? Если копия, то где оригиналы хранятся? Хотелось бы, конечно, без копий работать, и вроде как emplace_back(), в отличие от push_back() это и должен делать, но у меня почему то не делает...Узнал об этом через контрольные cout'ы в конструкторе копии и обычном.
push_back - делает копию
emplace_back - конструирует объект на месте, те он не создает временный объект, а потом его копирует или перемещает.
В остальном разницы нету.
Оригиналы нигде не хранятся.
Цитата Сообщение от Руслан92 Посмотреть сообщение
5) Меню меня слегка смущает, точнее его работа с draw() и его реализация перемещения по меню при помощи key1, key2, key3.
Что именно вас там смущает?
Цитата Сообщение от Руслан92 Посмотреть сообщение
Или сама форма его оставляет желать лучшего?
Смотря чего вы хотели добится?
Цитата Сообщение от Руслан92 Посмотреть сообщение
Только в этом его прелесть или есть какой-то важный момент, который я не знаю или не догоняю?
https://en.cppreference.com/w/... text_modes
1
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,244
Записей в блоге: 3
15.02.2019, 12:37
Цитата Сообщение от Azazel-San Посмотреть сообщение
Префикс 'c' к названию класса - ужас, не дай бог на продакшене будете так делать..
обоснуйте.

название файла Pet.h
а класс сPet
когда понадобится объект этого класса, то можно не париться с новым названием:
сPet Pet(...);
Более того я могу взглядом ток на этот один идентификатор сразу сказать, что это передо мною:
класс или объект. Мне не надо дополнительно рыскать по коду.

но смысл моей заметки был совсем в другом!
в более важной вещи, чем просто стиль,
слишком много буков и вы не ухватили главное?

но, с верою в идешный интеллисес вы можете писать и в машинных кодах, никто вам не запретить не сможет,
раумеется, пока вас не взяли в продакшён))
1
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 12:43
Цитата Сообщение от Руслан92 Посмотреть сообщение
Короче, если реально что-то по существу, то я переделаю.
Для начала надо изнать цель проекта, что он должен делать, какой функционал исполнять?

Добавлено через 2 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
Мне не надо дополнительно рыскать по коду.
Достаточно просто дать нормальное название объекту класса, а не сPet Pet(...);

Добавлено через 2 минуты
XLAT, Или вы в блокноте пишите у вас классы не подсвечиваются?
Ваш стиль пережиток прошлого, такое именование юзали в COM технологии, перед классом ставили префикс 'c', а "интерфейсом" 'i'.. В итоге получалась все таже угорская аннотация, о ее недостатках можете погуглить.
2
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 12:44  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
pch.h - это предкомпилированный заголовок созданный VS, выкиньте его он вам не нужен, у вас в проекте нету +100500 файлов и разницы в скорости сборки вы не увидите.
Я просто хотел научиться подключать предкомпилированные заголовки...хоть правильно это сделал?

Цитата Сообщение от Azazel-San Посмотреть сообщение
Что именно вас там смущает?
ну какая-то форма кривоватая...Я ее честно подсмотрел, подогнал, конечно под себя, сам реализовал на ее основе переход после самого нижнего пункта на самый верхний и наоборот и т.д.
Просто может вообще уже функция отдельная существует а я и не знаю. За с++11 и с++14 еще не садился.
И кстати, сильно ли нужно современному программисту с++ знать новый функционал 11 и 14?


Цитата Сообщение от Azazel-San Посмотреть сообщение
Смотря чего вы хотели добится?
Да вроде чего хотел, все реализовал, по крайней мере на данный момент..
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 12:47
Цитата Сообщение от Руслан92 Посмотреть сообщение
хоть правильно это сделал?
Ну, вроде, да)
Цитата Сообщение от Руслан92 Посмотреть сообщение
И кстати, сильно ли нужно современному программисту с++ знать новый функционал 11 и 14?
Современному, да, надо бы
Цитата Сообщение от Руслан92 Посмотреть сообщение
Да вроде чего хотел, все реализовал, по крайней мере на данный момент..
Я скорее о целях этого проекта вы хотели пощупать ООП?
1
45 / 0 / 0
Регистрация: 10.04.2016
Сообщений: 114
15.02.2019, 12:48  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
Для начала надо изнать цель проекта, что он должен делать, какой функционал исполнять?
Программа реализует Зоомагазин, который периодически на просторах киберфорума встречается. Присутствуют функции добавления, редактирования, удаления, отображения БД(если это можно так назвать (да простит меня Нео)...), а также записи всего этого добра в файл и чтение из него.
Теперь появилась еще новая задача после того, как сюда выложил. Сделать из класса Зоомагазин объект Зоомагазин, чтоб можно было его в дальнейшем использовать например
от XLAT
что касается класса cPetShop
допустим есть второй разработчик, у которое есть класс cMan
по которому он конструирует людей.
Так вот он решает что некоторые из них могут иметь магазин зверей.
Он просто берет ваш cPetShop и создает каждому персу в группе избранных по магазину одной строчкой кода.

Если же вы оставите так, как у вас щас, то так сделать нельзя, ну, ясен, что без указанного мною рефакторинга будет нельзя.

вот, собсно, Архитектура это не орхетиктура))
0
15.02.2019, 12:48

Не по теме:

Цитата Сообщение от Azazel-San Посмотреть сообщение
угорская аннотация
Может, все же, венгерская нотация? :D

0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,244
Записей в блоге: 3
15.02.2019, 12:49
Цитата Сообщение от Azazel-San Посмотреть сообщение
такое именование юзали в COM технологии, перед классом ставили префикс 'c', а "интерфейсом" 'i'
с уважением к вам сочувствую:
как жертве хейтерских статей про венгерскую нотацию))

слепая вера в всесильный интеллисенс тож до добра не доведет))
как говорят, на год надейся, а поливать не забывай...
2
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
15.02.2019, 12:50
XLAT, впрочем вы можете писать как хотите вконце концов на вкус и цвет.. На проекте вам всеравно дадут другой стиль, которому будете следовать, а для "домашних" проектов это не так критично я думаю, но все это дела вкуса и ваших усмотрений я бы не стал насаживать свой стиль кому-то, это тема холиваров
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2019, 12:50

Прошу оценить
1. Видеокарта Sapphire Radeon HD3470 256Mb GDDR3 PCI-E DUAL DVI-I/TVO. 2. Видеокарта Sapphire X1650 256m DDR2 AGP VGA/TVO/DVI-I. 3....

Прошу оценить
Здравствуйте. Пересмотрел пол сотни роликов, почитал тут, и не только. В результате чего сформировалось отчетливая каша в голове. Очень...

Прошу оценить пк
Вот характеристики: ЦП: QuadCore AMD Phenom II X4 Black Edition 965, 3415 MHz; Системная плата: ASRock 890FX Deluxe4; Оперативная...

Прошу оценить
Здравствуйте подскажите пожалуйста за сколько можно продать компьютер с характеристиками как на фото.

Прошу оценить пк
Добрый день.Прошу оценить пк для игр Процессор Intel Core i5-4590 Материнская плата ASUS B85M-G Память Kingston HyperX Fury DDR-III...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru