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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

Свойства класов - зачем помещать свойство в приват - C++

01.04.2012, 18:23. Просмотров 3194. Ответов 54
Метки нет (Все метки)

Очень часто встречал такие классы
C++
1
2
3
4
5
6
7
8
claas A
{
 public:
  int getCount( void ) { return count; };
  void setCount( int c ) { count = c; };
 privte:
  int count;
}
Но зачем помещать свойство в приват и затем делать 2 лишних метода для работы с ним? Почему бы не поместить это свойство в паблик и не работать с ним на прямую? Просто если так делают значит есть этому логическое обьяснение, и хочется его понять.

PS. тут ещё мысля возникла, если в Си (не C++, а простой Си) небыло оператора new то получается небыло утечек памяти?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2012, 18:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Свойства класов - зачем помещать свойство в приват (C++):

Получить доступ в приват - C++
Не получается получить доступ к полям привата. Вот написал такой код на с++. #include <iostream> using namespace std; class...

Производные классы паблик и приват - C++
Здравствуйте, нужна помощь. Это пример из книги Лафоре ООП С++. Не могу понять почему программа работает, хотя при наследовании классы...

Наследование класов - C++
Классы для меня в целом очень сложно даются, мне очень нужна данная прога так как все последующие лабораторные будут с ней связаны,...

наследование класов - C++
Напишите пожалуйста ету програму, а то я никак немогу разобратся с наследованием. Создать класс колесо, имеющее радиус. Определить...

Проверка наследования класов - C++
У меня есть один базовой клас "Creature", от него наследуються два класа "Animal" и "Plant". От класа "Animal" наследуються еще 2 класа...

Преобразование типов и методы класов - C++
Есть задача: 1)Создать класс Triangle, разработав следующие элементы класса: поля: int a, b, c; 2)Конструктор, позволяющий создать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.04.2012, 21:47 #16
как минимум ТСа это лишит возможности контролировать валидность устанавливаемых значений
(почему бы не сделать A().count = -1; )
с практической же точки зрения так проще отлаживать (при установке значения не через сеттеры отлавливать изменения можно лишь на уровне watchpoint'ов)
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.04.2012, 22:02 #17
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Вот тот самый его вектор, пример которого я привёл
Как минимум несколько поводов задуматся о том хороший ли это пример:
- использование макросов, вместо констант
- конструктор копирования не делает ничего, чего бы не сделал генеренный компилятором, не нужен
- часть операторов является членами, часть нет, при ни одному из операторов не нужен доступ к закрытой части, причем все свободные операторы зачем-то объявлены друзьями
- операторы сравнения возвращают int
- почему часть методов делают inplace модификацию объекта (negative), а часть возвращают измененную копию (cross)
4
retmas
01.04.2012, 22:12
  #18

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Как минимум несколько поводов задуматся о том хороший ли это пример:
зато он верит авторам таких "публикаций"

2
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
01.04.2012, 22:26 #19
Цитата Сообщение от retmas Посмотреть сообщение
зато он верит авторам таких "публикаций"
Страуструпу ты тоже не веришь?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.04.2012, 22:44 #20
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Страуструпу ты тоже не веришь?
Не нужно говоря про ООП, опираться на книги описывающие конкретный язык. В Страуструпе полно не очень хороших примеров кода с точки зрения ООП, служащих при этом неплохой иллюстрацией возможностей языка.
0
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
01.04.2012, 22:47 #21
Страуструпу я "доверяю, но проверяю". а вот тебе и твоему автору публикации - даже не доверяю.
0
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
01.04.2012, 23:17  [ТС] #22
Цитата Сообщение от silent_1991 Посмотреть сообщение
Начинающим-то хоть голову не забивайте, пусть учатся делать правильно, не всё же время они хеллоуворлды писать будут, в которых нет таких понятий как "расширяемость", "изменение условий задачи" и т.д.
Я не совсем нович, да я не совсем знаю весь синтаксис Си, но я могу построить у себя в голове модель программы и структуру класов, поэтому ответ "так правельно" меня не устраивает, а вот коментарий Домовёнка про указатели очень даже убедил. Спасибо.
0
villu
203 / 204 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
01.04.2012, 23:24 #23
C++
1
2
3
4
5
6
7
8
claas A
{
 public:
  int getCount( void ) { return count; };
  void setCount( int c ) { count = c; };
 privte:
  int count;
}
Так я могу бросить исключение в случае, когда c невалидный, написать thread-safe вариант класса, посчитать количество обращений к c, промониторить изменения ... и все это всего из одного места в кода.
C++
1
2
3
4
5
claas A
{
 public:
  int count;
}
В этом случае чтоб сделать все это мне придется переписать половину всего кода.
Вопрос в поддержке и расширяемости.
0
silent_1991
01.04.2012, 23:27
  #24

Не по теме:

Цитата Сообщение от villu Посмотреть сообщение
Вопрос в поддержке и расширяемости.
Я уже говорил это Kuzia domovenokу в другой теме... Мой комментарий он проигнорировал.

0
retmas
01.04.2012, 23:30
  #25

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
Мой комментарий он проигнорировал.
зачастую таким людям и не нужны комментарии. им главное сказать своё мнение громко и несмотря ни на что.

2
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.04.2012, 23:35 #26
Цитата Сообщение от villu Посмотреть сообщение
Так я могу бросить исключение в случае, когда c невалидный, написать thread-safe вариант класса, посчитать количество обращений к c, промониторить изменения ... и все это всего из одного места в кода.
В представленном варианте Сount должен быть обычной структурой, т.к. очевидно, что он представляет данные, а не поведение. Не стоит пихать ООП везде, где только можно и доводы о расшираемости ситуацию не изменят.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
01.04.2012, 23:37 #27
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не по теме:
Сообщение от villu
Вопрос в поддержке и расширяемости.
Я уже говорил это Kuzia domovenokу в другой теме... Мой комментарий он проигнорировал.
Ок, не буду игнорировать. Как часто ты переопределяешь геттеры сеттеры, которые изначально выглядели так
C++
1
void setter(int v): value(v){}
чем то большим? Какую цену за это платишь?
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.04.2012, 23:39 #28
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
void setter(int v): value(v){}
Что-то кажется мне невалидным код этот.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
01.04.2012, 23:43 #29
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Что-то кажется мне невалидным код этот.
В каком месте. Я конечно признаю, что могу ошибаться, но ошибки не вижу.
0
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.04.2012, 23:47 #30
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В каком месте.
В наличии списка инициализации в методе.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2012, 23:47
Привет! Вот еще темы с ответами:

Перегрузка операторов разных класов - C++
здравствуйте уважаемые форумчане начал программировать класс полиномов и начал я перегружать оператор * для разных классов friend...

Можно ли помещать в вектор разные объекты? - C++
у меня разные 3 вида объекта. Но у них есть несколько общих свойств, по которым нужно будет сделать сортировку. Так вот как быть. С...

Перегрузка опереторов для пользовательских класов - C++
#include <iostream> #include <sstream> #include <string> #include <cmath> #include <windows.h> using namespace std; ...

Ошибка в коде при использовании класов - C++
#include <iostream> #include <fstream> #include <time.h> #include <stdio.h> using namespace std; class Hello { int money,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.04.2012, 23:47
Ответ Создать тему
Опции темы

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