Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Qadronic
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 32
1

Реализовать класс Bank (найти и исправить ошибки и недочёты в коде)

08.05.2018, 19:20. Просмотров 846. Ответов 11
Метки нет (Все метки)

Что тут не так? Подскажите пж! 2 дня сижу и не понимаю как сделать этот чёртов банк!
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
#include <iostream> 
#include <conio.h> 
#include <cstdlib> 
#include <cmath> 
#include <Windows.h> 
#include <fstream> 
#include <clocale>
 
using namespace std;
 
class Bank
{
private:
    char surn[500];
    char name[500];
    char otch[500];
    int year;
    int home;
public:
    Bank(char a[500], char b[500], char c[500], int d, int e)
    {
        setSurName(a);
        setName(b);
        setOtchestvo(c);
        setYearOfBorn(d);
        setNumberOfHouse(e);
    }
    void setSurName(char x[500])
    {
        surn = x;
    }
    void setName(char y[500])
    {
        name = y;
    }
    void setOtchestvo(char z[500])
    {
        otch = z;
    }
    void setYearOfBorn(int w)
    {
        year = w;
    }
    void setNumberOfHouse(int v)
    {
        home = v;
    }
    char getSurName[500]()
    {
        return surn;
    }
    char getName[500]()
    {
        return name;
    }
    char getOtchestvo[500]()
    {
        return otch;
    }
    int getYearOfBorn()
    {
        return year;
    }
    int getNumberOfHouse()
    {
        return home;
    }
};
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int dei;
    char fam[500];
    char im[500];
    char ot[500];
    int god;
    int dom;
    cout << "\t\t\t\t\t\tДобро пожаловать!";
    cout << "\n1) Войти\n2) Зарегистрироваться\n";
    cout << "\nДействие: ";
    cin >> dei;
    if (dei == 2)
    {
        system("cls");
        cout << "Введите Фамилию: ";
        for (int x; x<100; x++)
        {
            cin » fam[x];
        }
        cout << "\nВведите Имя: ";
        for (int x; x<100; x++)
        {
            cin >> im[x];
        }
        cout << "\nВведите Отчество: ";
        for (int x; x<100; x++)
        {
            cin >> ot[x];
        }
        cout << "\nВведите ГОД Рождения: ";
        cin >> god;
        cout << "\nВведите Номер ВАШЕГО Дома: ";
        cin >> dom;
        Bank user(fam, im, ot, god, dom);
        system("cls");
        cout >> "Здравствуйте, ";
        for (int x; x<100; x++)
        {
            cout << im[x];
        }
        cout << "!";
    }
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2018, 19:20
Ответы с готовыми решениями:

Реализовать базовый класс «Буква» в соответствии с условием (найти и исправить ошибки в коде)
Создать базовый класс «буква», такой, что: a) он содержит перечислительная тип, что обозначает 4...

Реализовать пользовательский класс Matrix (найти причины возникновения ошибок в коде и исправить эти ошибки)
Доброго времени суток,задание написать класс Matrix,все вроде бы понятно,но почему-то моя матрица...

Реализовать класс "Счётчик" (Найти и исправить ошибки в коде)
Вот условие: &quot;Цифровой счетчик, это переменная с ограниченным диапазоном. Значение которой...

Реализовать шифратор/дешифратор (найти и исправить ошибки в коде)
Выходят три ошибки Помогите исправить // ConsoleApplication30.cpp: определяет точку входа для...

Базовый и производный класс: найти и исправить ошибки в коде
Ребятки подскажите где ошибка?! Что не правильно сделала?. #include &lt;iostream&gt; #include...

11
mvngr
150 / 121 / 76
Регистрация: 15.04.2018
Сообщений: 458
08.05.2018, 20:47 2
Лучший ответ Сообщение было отмечено Qadronic как решение

Решение

функции класса с строками лучше переделать в string
C++
1
2
3
4
5
6
7
8
9
#include <string>
...
private:
    string surn;
...
void setSurName(string x)
{
    surn = x;
}
Либо же, если так делать нельзя, то...

C++
1
2
3
4
char *surn;
//гуглите как работать с такими строками, информации полно
 
char * getSum() //если что
109:
C++
1
cout << "Zdravstvujte, ";
1
Recrut_rf
60 / 36 / 5
Регистрация: 14.10.2014
Сообщений: 183
Завершенные тесты: 2
08.05.2018, 21:05 3
Цитата Сообщение от Qadronic Посмотреть сообщение
C++
1
char getName[500]() { return name; }
Цитата Сообщение от Qadronic Посмотреть сообщение
C++
1
void setOtchestvo(char z[500]) { otch = z; }
Цитата Сообщение от Qadronic Посмотреть сообщение
C++
1
void setSurName(char x[500]) { surn = x; }
Я что-то сильно туплю, но никак понять не могу. Что делают эти строчки кода?
0
IchimaruGin
78 / 78 / 44
Регистрация: 14.07.2013
Сообщений: 392
Завершенные тесты: 1
08.05.2018, 21:08 4
Qadronic, наверное лучше данные сделать публичными чем к каждому полю писать геттер и сеттер с точки зрения времени) но если по правильному то оставить данные закрытыми и удалить все сеттеры а объект инициализировать в конструкторе)
и что в нём не так?) что "оно" должно делать и что получается?)

не гарантирую что оно делает то что надо, но оно хотя бы компилируется)
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
#include <iostream> 
#include <conio.h> 
#include <cstdlib> 
#include <cmath> 
#include <Windows.h> 
#include <fstream> 
#include <clocale>
 
using namespace std;
 
class Bank
{
private:
    char surn[500];
    char name[500];
    char otch[500];
    int year;
    int home;
public:
    Bank(char* a, char* b, char* c, int d, int e) : year(d), home(e)
    {
        strcpy_s(surn, a);
        strcpy_s(name, b);
        strcpy_s(otch, c);
    }
    const char* getSurName()
    {
        return surn;
    }
    const char* getName()
    {
        return name;
    }
    const char* getOtchestvo()
    {
        return otch;
    }
    int getYearOfBorn()
    {
        return year;
    }
    int getNumberOfHouse()
    {
        return home;
    }
};
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int dei;
    char fam[500];
    char im[500];
    char ot[500];
    int god;
    int dom;
    cout << "\t\t\t\t\t\tДобро пожаловать!";
    cout << "\n1) Войти\n2) Зарегистрироваться\n";
    cout << "\nДействие: ";
    cin >> dei;
    if (dei == 2)
    {
        system("cls");
        cout << "Введите Фамилию: ";
        for (int x = 0; x<100; x++)
        {
            cin >> fam[x];
        }
        cout << "\nВведите Имя: ";
        for (int x = 0; x<100; x++)
        {
            cin >> im[x];
        }
        cout << "\nВведите Отчество: ";
        for (int x = 0; x<100; x++)
        {
            cin >> ot[x];
        }
        cout << "\nВведите ГОД Рождения: ";
        cin >> god;
        cout << "\nВведите Номер ВАШЕГО Дома: ";
        cin >> dom;
        Bank user(fam, im, ot, god, dom);
        system("cls");
        cout << "Здравствуйте, ";
        for (int x = 0; x<100; x++)
        {
            cout << im[x];
        }
        cout << "!";
    }
    _getch();
    return 0;
}
1
Recrut_rf
60 / 36 / 5
Регистрация: 14.10.2014
Сообщений: 183
Завершенные тесты: 2
08.05.2018, 21:22 5
IchimaruGin, Зачем в конструкторе инициализировать объект, именно в данном примере. Какой в этом смысл?

Добавлено через 4 минуты
Надо через гетеры и сетеры сделать доступ к данным и с помощью тех же сетеров инициализировать объект. Хотя можно и твой вариант оставить, но он на мой "нубский" взгляд как то не очень ООП-ный.
0
IchimaruGin
78 / 78 / 44
Регистрация: 14.07.2013
Сообщений: 392
Завершенные тесты: 1
08.05.2018, 21:26 6
Recrut_rf, я вообще хз что должен делать данный пример) попросили исправить я сделал что бы компилировалось) а вообще конструктор и должен инициализировать объект. а давать доступ к закрытым данным через сеттеры это бессмысленно...

Добавлено через 1 минуту
Recrut_rf, И - инкапсуляция(это не ограничение доступа к данным и не защита от неправильного использования приватных данных)
0
Recrut_rf
60 / 36 / 5
Регистрация: 14.10.2014
Сообщений: 183
Завершенные тесты: 2
08.05.2018, 21:38 7
IchimaruGin, Вроде как по ООП-ному доступ к данным класса только через методы самого класса, то есть через гетеры и сетеры. Но посмотрев на твой код, я призадумался, ведь можно получить нужные данные (как у тебя в коде), и создать объект, в конструктор которого добавить эти данные. Но честно хз какой вариант истинно верный. У меня нет огромного опыта, чтоб утверждать что правильно, а что нет.
0
IchimaruGin
78 / 78 / 44
Регистрация: 14.07.2013
Сообщений: 392
Завершенные тесты: 1
08.05.2018, 21:45 8
Recrut_rf, если делаешь данные закрытыми то нужно оставлять либо только геттеры либо только сеттеры иначе ничего не изменится, то-есть у пользователя будет полный контроль над закрытым полем что и противоречит инкапсуляции.
0
Qadronic
0 / 0 / 0
Регистрация: 08.05.2018
Сообщений: 32
09.05.2018, 00:41  [ТС] 9
IchimaruGin, то есть мне нужно выбрать что-то одно: сеттеры или геттеры? Разницы от их двоих нет? Просто в примерах, когда я обучался этому языку программирования, были и сеттеры и геттеры одновременно! Как так то?
0
QuakerRUS
516 / 459 / 219
Регистрация: 30.10.2017
Сообщений: 1,453
Завершенные тесты: 3
09.05.2018, 00:50 10
Если уж важна инкапсуляция и хочется инициализировать данные класса сеттерами, можно просто ненужные пользователю класса сеттеры сделать приватными.
0
IchimaruGin
78 / 78 / 44
Регистрация: 14.07.2013
Сообщений: 392
Завершенные тесты: 1
09.05.2018, 12:56 11
Qadronic,
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
class Object1 { // значение поля х может быть изменено и внутри класса и в методе main()
public:
    int x;
    Object1(int a = 0) : x(a) { }
}
 
class Object2 { // значение поля х может быть изменено и внутри класса и в методе main()
public:
    Object2(int a = 0) : x(a) { }
    int get_x();
    void set_x(int a);
private:
    int x;
}
 
class Object3 { // значение поля х может быть изменено только внутри класса
public:
    Object3(int a = 0) : x(a) { }
    int get_x();
private:
    int x;
}
 
int main() {
    int tmp;
    Object1 ob1(10);
    tmp = ob1.x;
    ob1.x = tmp + 5;
 
    Object2 ob2(20);
    tmp = ob2.get_x();
    ob2.set_x(tmp + 5);
 
    Object3 ob3(30);
    tmp = ob3.get_x();
}
суть в том что бы ограничивать закрытые данные либо только для чтения либо только для записи, иначе просто оставляешь поле открытым и тебе не нужно писать для поля и геттеры и сеттеры какие раздувают объем кода но по сути ничего не меняют.

Добавлено через 13 минут
если нужно предоставить доступ к закрытому полю то пишешь методы которые гарантируют правильное использование твоего класса. ну если сеттер будет ограничивать а не просто someValue = value; то такие сеттеры могут быть. хотя это и геттеров касается. геттеры тоже могут контролировать что-то вместо простого return value;

Добавлено через 50 минут
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
#include <iostream>
#include <cmath>
 
class Equation {
public:
    Equation(int x, int y, int z) : a(x), b(y), c(z) {
        Solve();
    }
    void ResetEquation(int x, int y, int z) { // своеобразный сеттер для удобства
        a = x;
        b = y;
        c = z;
        Solve();
    }
    void showEquation() {
        std::cout << std::showpos << a << "x^2 " << b << "x " << c << std::endl;
    }
    void showRoots() {
        std::cout << "x1 = " << roots[0] << std::endl << "x2 = " << roots[1] << std::endl;
    }
private:
    void Solve() {
        double discriminant = b * b - 4 * a * c;
        roots[0] = (-b + sqrt(discriminant)) / (2 * a);
        roots[1] = (-b - sqrt(discriminant)) / (2 * a);
    }
    int a;
    int b;
    int c;
    double roots[2];
};
 
int main() {
    Equation a(3, 6, 3);
    a.showEquation();
    a.showRoots();
    a.ResetEquation(4, 12, 4);
    a.showEquation();
    a.showRoots();
}
да есть к чему придраться но по-моему неплохой пример инкапсуляции
0
sourcerer
25.07.2018, 07:06     Реализовать класс Bank (найти и исправить ошибки и недочёты в коде)
  #12
 Комментарий модератора 
Qadronic, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
25.07.2018, 07:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2018, 07:06
Привет! Вот еще темы с ответами:

Реализовать примитивную версию электронных таблиц (найти и исправить ошибки в коде)
программа работает но не правильно, код длинный и возможно слишком простой, помогите пожалуйста,...

Реализовать структуру Student (не работает вывод на консоль - найти и исправить ошибки в коде)
Описать структуру с именем STUDENT, содержащую следующие поля:-фамилия и инициалы;-номер...

Реализовать класс, выводящий сообщение на консоль (найти и исправить ошибки)
Здравствуйте! Разбираю тему &quot;классы&quot; в С++. Программа должна выдавать сообщение: website:...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru