/* Конструктор Конструктор - это специальный метод, который вызывается при создании объекта Конструктор Book(const char aTitle[], float aPrice, int aPages) принимает три аргумента и задаёт этими аргументами поля класса, а также печатает на экран слово Constructor. Конструктор вызывается в строке Book a = Book("War and Peace", 1700, 900). В этом примере конструктор делает то же самое, что и обычная инициализация структуры: Book a = {"War and Peace", 1700, 900}; Преимущество конструктора по сравнению с обычной инициализации структур состоит в том, что программист может сам задать то, что будет происходить при создании объекта. Напоминание: Функция strcpy из библиотеки string.h языка C принимает на вход 2 строки и просто копирует содержимое второй строки в первую строку. */ #include #include #include using std::cout, std::endl; struct Book { char title[100]; float price; int pages; Book(const char aTitle[], float aPrice, int aPages) { cout << "Constructor" << endl; strcpy(title, aTitle); price = aPrice; pages = aPages; } void print() const { std::cout << title << ", price = " << price << ", pages = " << pages << std::endl; } }; int main() { Book a = Book("War and Peace", 1700, 900); a.print(); Book b = Book("The Great Gatsby", 800, -600); b.print(); } /* Задачи: 1) Предположим, что программист, работая с наши классом Book, ошибся в конструкторе и установил у книги отрицательное количество страниц. Измените конструктор таким образом, чтобы программа не создавала объект с отрицательным числом страниц. Вместо этого она должна писать сообщение об ошибке и выходить из программы. Для выхода из программы можно использовать функцию std::exit(1) из библиотеки 2) Конструкторы можно перегружать также, как и обычные функции и методы. Добавьте новый конструктор, который не будет принимать никаких аргументов и будет создавать объект с полями равными title: "Default" price: 0 pages: 0 Вызовите этот конструктор из main Конструктор, который не принимает аргументов, называется конструктором по умолчанию. 3) Конструкторы можно перегружать также, как и обычные функции и методы. Добавьте новый конструктор, который будет принимать объект типа Book (по константной ссылке) и будет задавать поля текущего объекта, используя поля аргумента Вызовите этот конструктор из main Конструктор, который создаёт объект, используя объект такого-же типа, называется конструктором копирования. */