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

Провете класс на предмет ошибок инкапсуляции - C++

Восстановить пароль Регистрация
 
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
08.03.2013, 19:26     Провете класс на предмет ошибок инкапсуляции #1
Добрый день! Недавно начал изучение ООП C++ и вот настал момент, когда я создал свой первый класс и обьект. Хочу попросить проверить его на предмет ошибок, особенно интересует, все ли построено правильно с точки зрения инкапсуляции. Методы доступны для общего доступа, поля - нет. Поля можно изменять только через встроенные в класс методы, так?

Код:
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
class Counter
{
    int min, max, count;
public:
    Counter()
    {
        min=0;
        max=10;
        count=0;
    }
    Counter(int x, int y)
    {
        min=x;
        max=y;
    }
    void showValues()
    {
        cout<<endl<<"Min = "<<min<<endl;
        cout<<"Max = "<<max<<endl;
    }
    void showCounter()
    {
        cout<<endl<<"Count = "<<count<<endl;
    }
    void incCount()
    {
        count++;
    }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
08.03.2013, 20:03     Провете класс на предмет ошибок инкапсуляции #2
всё верно, но есть некоторые замечания
1) в конструкторе с параметрами count не инициализируется
2) методы вывода лучше переписать, чтобы они возвращали инкапсулированные в классе данные, а не сами их выводили
3) реализацию и интерфейс лучше разделять, интерфейс в хедер, реализацию в срр
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
08.03.2013, 20:16  [ТС]     Провете класс на предмет ошибок инкапсуляции #3
Цитата Сообщение от Кудаив Посмотреть сообщение
всё верно, но есть некоторые замечания
1) в конструкторе с параметрами count не инициализируется
2) методы вывода лучше переписать, чтобы они возвращали инкапсулированные в классе данные, а не сами их выводили
3) реализацию и интерфейс лучше разделять, интерфейс в хедер, реализацию в срр
спасибо! Не могли бы подробнее по поводу второго, каким образом это реализовать на примере моего класса?
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
08.03.2013, 20:24     Провете класс на предмет ошибок инкапсуляции #4
методы show удалить, вставить методы
C++
1
2
3
4
...
int GetMin() const{return min;}
int GetMax() const{return max;}
int GetCount() const{return count;}
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
08.03.2013, 20:31  [ТС]     Провете класс на предмет ошибок инкапсуляции #5
Цитата Сообщение от Кудаив Посмотреть сообщение
методы show удалить, вставить методы
C++
1
2
3
4
...
int GetMin() const{return min;}
int GetMax() const{return max;}
int GetCount() const{return count;}
спасибо за помощь
freemanc
 Аватар для freemanc
12 / 12 / 1
Регистрация: 27.11.2012
Сообщений: 140
08.03.2013, 22:39     Провете класс на предмет ошибок инкапсуляции #6
Все окей)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2013, 23:19     Провете класс на предмет ошибок инкапсуляции
Еще ссылки по теме:

C++ Об инкапсуляции данных в ООП
Найти предмет с лучшей оценкой C++
выражение слева от ".name" должно представлять класс, структуру или объединение (Парочка ошибок) C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
08.03.2013, 23:19     Провете класс на предмет ошибок инкапсуляции #7
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
#include <iostream>
using namespace std;
 
class Counter
{
    int min, max, count;
public:
    Counter()
    {
        min=0;
        max=10;
        count=0;
    }
    Counter(int x, int y)
    {
        min=x;
        max=y;
        //count=0;//разремьте первую пару "//" и будет работать
    }
    void showValues()
    {
        cout<<endl<<"Min = "<<min<<endl;
        cout<<"Max = "<<max<<endl;
    }
    void showCounter()
    {
        cout<<endl<<"Count = "<<count<<endl;
    }
    void incCount()
    {
        count++;
    }
};
 
int main(int argc, char* argv[]){
setlocale(0,"rus");
 
Counter A;
A.showCounter();
A.showValues();
 
Counter B(5,15);
B.showCounter();//посмотрите как выводится count
B.showValues();
 
cout<<endl;
system("pause");
return 0;
}
Yandex
Объявления
08.03.2013, 23:19     Провете класс на предмет ошибок инкапсуляции
Ответ Создать тему
Опции темы

Текущее время: 11:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru