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
2022-09-14 19:05:27 +03:00

86 lines
No EOL
4.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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