Читаю книгу Джес Либерти, освой с++ за 21 день.
Начали изучать классы, они и так мне не поддаются для понимания, так еще и в одном из первых примеров я на ручнике. Представлен класс:
class Cat
{
public:
unsigned int GetAge();
void SetAge(unsigned int Age);
unsigned int GetWeight;
void SetWeight(unsigned int Weight);
void Meow();
private:
unsigned int itsAge;
unsigned int itsWeight;
};
Объясните мне пжл какой в нем смысл? Какая тут связь между public и private и как из другой функции добраться до метода itsAge например?
Другие языки программирования и технологии
проясните по классу в c++ по книге.
Вполне так себе нормальное обьявление класса .Это еще не определение, потому что описан только интефейс класса.
Нужно продолжить, например так:
void Cat::SetAge(unsigned int Age)
{
itsAge =Age;
}
Как видим, приватный itsAge может быть доступен через Cat::SetAge(unsigned int).Налицо инкапсуляция.
Ну и так:
unsigned int Cat::GetAge()
{
return itsAge ;
}
Теперь, обьявив переменные класса Cat,можем манипулировать закрытыми членами:
Cat MyPussy;
MyPussy.SetAge(3);
cout < < "Моей кошке " < < MyPussy.GetAge() < < "лет " < < endl;
Нужно продолжить, например так:
void Cat::SetAge(unsigned int Age)
{
itsAge =Age;
}
Как видим, приватный itsAge может быть доступен через Cat::SetAge(unsigned int).Налицо инкапсуляция.
Ну и так:
unsigned int Cat::GetAge()
{
return itsAge ;
}
Теперь, обьявив переменные класса Cat,можем манипулировать закрытыми членами:
Cat MyPussy;
MyPussy.SetAge(3);
cout < < "Моей кошке " < < MyPussy.GetAge() < < "лет " < < endl;
itsAge - не метод.
И, судя по названиям, через GetAge и SetAge. Геттер и сеттер защищают переменную от некорректного изменения (ну, например, чтобы отрицательный возраст не поставили).
И, судя по названиям, через GetAge и SetAge. Геттер и сеттер защищают переменную от некорректного изменения (ну, например, чтобы отрицательный возраст не поставили).
> Объясните мне пжл какой в нем смысл?
Это класс-пример, для того чтобы было все понятно про классы. В этом весь его смысл. Хотя, еще это класс моделирующий кошку, а кошак у меня сдох :(
> Какая тут связь между public и private и как из другой функции добраться до метода itsAge например?
Из какой другой функции? Если из вообще любой другой, то с помощью объявленных публичных методов GetAge(), SetAge(). Это принцип сокрытия данных в ООП, к полям класса доступ предоставляется с помощью методов.
Если, к примеру иметь прямой доступ к полям класса (объявить их публичными и записывать напрямую) , то туда можно записать все, что угодно, например отрицательный возраст или возраст больше 30 лет (ну кошки явно столько не живут) . Имея методы для доступа к полям класса, но запретив доступ непосредственно к самим полям, эту ситуацию (запись некорректного возраста) можно будет каким-либо образом обработать (как это сделать, скорее всего показано далее по тексту книги) .
> Суть вопроса в том, какая тут связь между GetAge SetAge и itsAge.
Читай дальше, там должна быть реализация методов GetAge, SetAge и сразу увидишь связь с itsAge.
Это класс-пример, для того чтобы было все понятно про классы. В этом весь его смысл. Хотя, еще это класс моделирующий кошку, а кошак у меня сдох :(
> Какая тут связь между public и private и как из другой функции добраться до метода itsAge например?
Из какой другой функции? Если из вообще любой другой, то с помощью объявленных публичных методов GetAge(), SetAge(). Это принцип сокрытия данных в ООП, к полям класса доступ предоставляется с помощью методов.
Если, к примеру иметь прямой доступ к полям класса (объявить их публичными и записывать напрямую) , то туда можно записать все, что угодно, например отрицательный возраст или возраст больше 30 лет (ну кошки явно столько не живут) . Имея методы для доступа к полям класса, но запретив доступ непосредственно к самим полям, эту ситуацию (запись некорректного возраста) можно будет каким-либо образом обработать (как это сделать, скорее всего показано далее по тексту книги) .
> Суть вопроса в том, какая тут связь между GetAge SetAge и itsAge.
Читай дальше, там должна быть реализация методов GetAge, SetAge и сразу увидишь связь с itsAge.
Это один из основных принципов ООП - инкапсуляция. Поля класса, то есть его внутренние данные, полагается делать private - недоступными для прямого изменения извне, доступ к ним разрещается только через методы коасса - это делает программы намного более надежными, не позволяя другим программистам "лезть в кишки" класса. Приведу просто цитату:
"Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне) , а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными) . "
"Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне) , а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными) . "
В private находяться закрытые данные. Они доступны только из public этого самого класса или из дружественных функций.
на сколько я помню, приват мона использовать только в нутри класса, паблик, мона из вне.
Похожие вопросы
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.
- Абстрактные классы в c#
- классы на C++
- расскажите пожалуйста просто что такое класс в C++, я кодил только на С и Delphi
- Как изменить свойство всех объектов одного класса в C#?
- Зачем нужны классы в c++? Никак не могу понять... Что такое private, public зачем они нужны и т. д?
- Книга c++ для чайников устарела?
- Посоветуйте НОРМАЛЬНУЮ книгу по освоению C для новичков
- Есть ли ошибка? Может ли возникнуть? И вообще приемлимо ли? C++ классы
- Посоветуйте хорошую книгу по изучению C++..