86 lines
4.2 KiB
C++
86 lines
4.2 KiB
C++
|
/*
|
|||
|
Конструктор
|
|||
|
|
|||
|
Конструктор - это специальный метод, который вызывается при создании объекта
|
|||
|
|
|||
|
Конструктор 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 <iostream>
|
|||
|
#include <cmath>
|
|||
|
#include <string.h>
|
|||
|
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) из библиотеки <cstdlib>
|
|||
|
|
|||
|
|
|||
|
2) Конструкторы можно перегружать также, как и обычные функции и методы.
|
|||
|
Добавьте новый конструктор, который не будет принимать никаких аргументов и будет создавать объект с полями равными
|
|||
|
title: "Default" price: 0 pages: 0
|
|||
|
Вызовите этот конструктор из main
|
|||
|
|
|||
|
Конструктор, который не принимает аргументов, называется конструктором по умолчанию.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
3) Конструкторы можно перегружать также, как и обычные функции и методы.
|
|||
|
Добавьте новый конструктор, который будет принимать объект типа Book (по константной ссылке)
|
|||
|
и будет задавать поля текущего объекта, используя поля аргумента
|
|||
|
Вызовите этот конструктор из main
|
|||
|
|
|||
|
Конструктор, который создаёт объект, используя объект такого-же типа, называется конструктором копирования.
|
|||
|
*/
|