Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (12)
.cpp#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
class Journal {
int pages;
char* editor;
int number;
public:
Journal(int p, char* ed, int num) : pages(p), number(num) {
editor = new char[strlen(ed) + 1];
strcpy(editor, ed);
cout << "Создан журнал: " << editor << ", страниц: " << pages << endl;
}
~Journal() {
delete[] editor;
cout << "Журнал удален" << endl;
}
};
class Book {
int pages;
char* name;
int year;
public:
// Конструктор с параметром по умолчанию
Book(int p = 10) {
pages = p;
name = new char[1];
*name = '\0';
year = 2007;
cout << "Создана книга: страниц = " << pages << ", год = " << year << endl;
}
~Book() {
delete[] name;
cout << "Книга удалена" << endl;
}
};
class Page {
int num;
int format;
public:
// Конструктор по умолчанию (неявно создается компилятором)
Page() {
cout << "Создана страница с конструктором по умолчанию" << endl;
}
};
// Выносим enum за пределы класса, чтобы сделать его публичным
enum Size {A0, A1, A2, A3, A4, A5};
class CopyBook {
int pages;
Size sz; // используем публичный enum
char name[20];
public:
// Только конструктор копирования, нет конструктора по умолчанию
CopyBook(const CopyBook& c) {
sz = c.sz;
strcpy(name, c.name);
pages = c.pages;
cout << "Создана копия тетради: " << name << ", размер: A" << sz << endl;
}
// Добавляем конструктор с параметрами для демонстрации
CopyBook(int p, Size s, const char* n) : pages(p), sz(s) {
strcpy(name, n);
cout << "Создана тетрадь: " << name << ", страниц: " << pages << ", размер: A" << s << endl;
}
};
int main() {
SetConsoleOutputCP(65001);
cout << "=== Задание 2.12 ===" << endl;
cout << "Демонстрация конструкторов по умолчанию" << endl;
cout << "\n1. Book можно создавать без параметров:" << endl;
Book b; // Работает - есть конструктор с параметром по умолчанию
cout << "\n2. Page можно создавать без параметров:" << endl;
Page p; // Работает - компилятор создает конструктор по умолчанию
cout << "\n3. Journal НЕЛЬЗЯ создавать без параметров:" << endl;
// Journal j; // Ошибка компиляции - нет конструктора по умолчанию
cout << " (закомментировано, чтобы программа компилировалась)" << endl;
cout << "\n4. CopyBook НЕЛЬЗЯ создавать без параметров:" << endl;
// CopyBook cb; // Ошибка компиляции - нет конструктора по умолчанию
cout << " (закомментировано, чтобы программа компилировалась)" << endl;
cout << "\nНо CopyBook можно создавать через конструктор с параметрами:" << endl;
CopyBook original(100, A4, "Математика"); // Используем публичный enum
cout << "\nИ через конструктор копирования:" << endl;
CopyBook copy(original); // Работает - есть конструктор копирования
cout << "\n=== ИТОГ ===" << endl;
cout << "Классы, которые можно создавать без параметров:" << endl;
cout << "- Book (есть конструктор с параметром по умолчанию)" << endl;
cout << "- Page (компилятор создает конструктор по умолчанию)" << endl;
cout << "\nКлассы, которые НЕЛЬЗЯ создавать без параметров:" << endl;
cout << "- Journal (нет конструктора по умолчанию)" << endl;
cout << "- CopyBook (нет конструктора по умолчанию)" << endl;
cout << "\nУсловия, при которых конструктор по умолчанию не создается:" << endl;
cout << "1. Если определен любой другой конструктор" << endl;
cout << "2. Если класс содержит ссылки или константные поля" << endl;
cout << "3. Если базовый класс не имеет конструктора по умолчанию" << endl;
return 0;
}
Соседние файлы в папке Лаба2
