/* Сокрытие данных - это разделение данных и функций абстрактного объекта на открытые (видимые извне) и скрытые (видимые только внутри самого объекта) В языке C++ это реализуется с помощью модификаторов доступа public и private Все поля и методы объявленные в секции public называются публичными и могут быть доступны извне структуры Все поля и методы объявленные в секции private называются приватными и не могут быть доступны извне структуры Приватные поля и методы могут быть доступны только в методах самого структуры (а также в друзьях, но об этом позже) Назначение сокрытия данных заключается в том, чтобы объекты нельзя было 'поломать' извне 'Поломать' тут означает задать поля объекта бессмысленным образом Например, в нашем примере мы бы могли поломать объект просто сделав поля price или pages отрицательными a.pages = -100; но благодаря тому, что поле pages является приватным, это сделать нельзя. Учитывая проверку в конструкторе, получается, что поля pages и price в принципе никогда не смогут стать отрицательными. Таким образом мы уберегли себя от возникновения ошибок при неправильном задании полей структуры. */ #include #include #include #include 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; }