66 lines
2.8 KiB
C++
66 lines
2.8 KiB
C++
|
/*
|
|||
|
Сокрытие данных - это разделение данных и функций абстрактного объекта на открытые (видимые извне) и скрытые (видимые только внутри самого объекта)
|
|||
|
В языке C++ это реализуется с помощью модификаторов доступа public и private
|
|||
|
|
|||
|
Все поля и методы объявленные в секции public называются публичными и могут быть доступны извне структуры
|
|||
|
Все поля и методы объявленные в секции private называются приватными и не могут быть доступны извне структуры
|
|||
|
Приватные поля и методы могут быть доступны только в методах самого структуры (а также в друзьях, но об этом позже)
|
|||
|
|
|||
|
|
|||
|
Назначение сокрытия данных заключается в том, чтобы объекты нельзя было 'поломать' извне
|
|||
|
'Поломать' тут означает задать поля объекта бессмысленным образом
|
|||
|
|
|||
|
Например, в нашем примере мы бы могли поломать объект просто сделав поля price или pages отрицательными
|
|||
|
a.pages = -100;
|
|||
|
но благодаря тому, что поле pages является приватным, это сделать нельзя.
|
|||
|
|
|||
|
|
|||
|
Учитывая проверку в конструкторе, получается, что поля pages и price в принципе никогда не смогут стать отрицательными.
|
|||
|
Таким образом мы уберегли себя от возникновения ошибок при неправильном задании полей структуры.
|
|||
|
*/
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <cmath>
|
|||
|
#include <string.h>
|
|||
|
#include <cstdlib>
|
|||
|
using std::cout, std::endl;
|
|||
|
|
|||
|
|
|||
|
struct Book
|
|||
|
{
|
|||
|
private:
|
|||
|
char title[100];
|
|||
|
float price;
|
|||
|
int pages;
|
|||
|
|
|||
|
public:
|
|||
|
Book(const char aTitle[], float aPrice, int aPages)
|
|||
|
{
|
|||
|
if (aPages < 0 || aPrice < 0 || strlen(aTitle) >= 100)
|
|||
|
{
|
|||
|
cout << "Error while creating Book!" << endl;
|
|||
|
std::exit(1);
|
|||
|
}
|
|||
|
|
|||
|
strcpy(title, aTitle);
|
|||
|
price = aPrice;
|
|||
|
pages = aPages;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void print() const
|
|||
|
{
|
|||
|
cout << title << ", price = " << price << ", pages = " << pages << endl;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
Book a = Book("War and Peace", 1700, 900);
|
|||
|
a.print();
|
|||
|
|
|||
|
a.pages = -100;
|
|||
|
}
|