This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar02_encapsulation/classroom_tasks/code/0book/06constructor.cpp

86 lines
4.2 KiB
C++
Raw Normal View History

2022-09-14 19:05:27 +03:00
/*
Конструктор
Конструктор - это специальный метод, который вызывается при создании объекта
Конструктор 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
Конструктор, который создаёт объект, используя объект такого-же типа, называется конструктором копирования.
*/