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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Error C2668: sqrt: неоднозначный вызов перегруженной функции http://www.cyberforum.ru/cpp-beginners/thread536026.html
Что не так? Ma= sqrt ((2*b^2 + 2 * c^2 - a^2)/4); Mb= sqrt ((2*a^2 + 2 * c^2 - b^2)/4); Mc= sqrt ((2*a^2 + 2 * b^2 - b^c)/4); 1>------ Построение начато: проект: dz, Конфигурация: Debug Win32 ------ 1> dz.cpp 1>c:\users\михаил\documents\visual studio 2010\projects\dz\dz\dz.cpp(16): error C2668: sqrt: неоднозначный вызов перегруженной функции
C++ Найти среднее арифметическое елементов каждого из непарных столбцов матрицы Размерность матрицы вводить самому http://www.cyberforum.ru/cpp-beginners/thread536016.html
istream_iterator C++
Добрый день, уважаемые форумчане! Прошу ответить на следующий вопрос - почему, когда создается istream_iterator пустым конструктором (например, в алгоритме copy для указания конца потока/файла), то вызывается конструктор объекта того класса, который мы передаем в качестве шаблонного аргумента?? Т.е., почему он вообще вызывается? Пример: .... class Test { public: Test() { cout <<...
Вложенные циклы. Вычисление двойной суммы. C++
#include<stdlib.h> #include<stdio.h> #include<math.h> long factor(int k) {long res; if((k==1)||(k==0)) res=1; else res=factor(k-1)*k; return res; }
C++ Как сделать выход из программы при условии выполнения предписания? http://www.cyberforum.ru/cpp-beginners/thread535999.html
Смысл кода: вводим столь-ко то значений и находим из них максимальное. Как сделать так, чтоб, когда вводимое значение было равно "-1", то программа завершалась? #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int main() { setlocale(LC_CTYPE, "Russian");
C++ Скопировать строку в переменную Здравствуйте, программа читает txt файл, в нем есть несколько строк, я хочу записать содержимое 2(для примера) строки в переменную. Меня направили почитать об std::string и std::getline, там не нашел ответа, хотя может быть что-то упустил(с английским не очень хорошо). В google нашел вариант с использованием boost::spirit, но он очень тяжелый для новичка. На чем я остановился: main.cpp... подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.04.2012, 19:41     Свойства класов - зачем помещать свойство в приват
Цитата Сообщение от OrmaJever Посмотреть сообщение
Спасибо прочитал, но так и не понял в чём преймущество? Ну если не брать тот факт что в метода можно делать всевозможные проверки. Предположим что класс написал я сам и использовать его буду тоже я, что мне даёт такой метод?
Да я тоже задавал тут этот вопрос. По идее да, нет смысла. Но некоторые "неговнокодеры" считают это дурным тоном.

Вот помню, то ли у Страуструпа, то ли ещё в какой классике был пример класс "сумма чисел" и он выглядел так
C++
1
2
3
4
5
6
7
8
9
10
11
class sum{
private:
int a, b, c;
public:
sum(int m, int n){a=m, b=n; c=m+n;}
void seta(int m){a=m; c=a+b;}
void setb(int m){b=n; c=a+b;}
int geta(){return a;}
int getb(){return b;}
int getc(){return c;}
};
То есть сокрытие в этом примере необходимо, чтобы цэ всегда оставался равен a+b
Ещё скрывают поля класса-указатели, в которых выделена динамическая память,
чтобы она выделялась/удалялась по правилам (например только в конструкторе, деструкторе и при копировании) и никто другой не мог бы создать утечку. Это тоже хорошее дело! Например
C++
1
2
3
4
5
6
7
8
9
10
11
class array{
private:
int* data;
int size;
public:
array(int);
~array();
array(array&);
int& operator[] (int);
array& operator = (array&);
};
Действительно, чтобы не потекла память надо ограничивать к ней доступ в таком классе!

Но это не означает, что надо брать идиотскую моду постоянно скрывать всё что нужно и не нужно. Вообще всё! Например класс Vector3D я бы спокойно совершенно объявил так:
C++
1
2
3
4
5
class Vector3D{
public:
double x, y, z;
///...и.т.д. все конструкторы, операторы, методы всё публично
};
И не вижу ни единой причины скрывать данные.

Добавлено через 28 минут
А вообще часто скрывают поля класса, чтобы следовать концепции "сокрытия реализации". То есть для пользователя класса оставляют открытыми для использования лишь несколько "рычагов воздействия" - методов класса. При этом подразумевается, что создав класс, программист может передать его своим коллегам, или "себе самому" так, что продолжая работу с этим классом можно забыть все сложности структур и алгоритмов скрытых внутри, абстрагироваться от них.
Таким образом создавать всё более сложные программы, оперируя простыми понятиями: Например создал класс render3D и его пользователей совершенно не беспокоит DirectX так выводит 3D картинку или OpenGL. Они воздействуют на класс методами "нарисуй то" да "нарисуй сё". При этом изменения внутренних полей класса нам не важно, а мы сосредотачиваемся на более нужных вещах.
 
Текущее время: 02:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru