Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (14)
.cpp#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
class Flower {
private:
int num;
int height;
char* name;
public:
// Исправленный конструктор - правильный порядок параметров по умолчанию
Flower(int n = 10, int h = 20, const char* nm = "Rose") : num(n), height(h) {
name = new char[strlen(nm) + 1];
strcpy(name, nm);
cout << "Создан цветок: " << name << ", количество: " << num << ", высота: " << height << " см" << endl;
}
// Конструктор копирования
Flower(const Flower& other) : num(other.num), height(other.height) {
name = new char[strlen(other.name) + 1];
strcpy(name, other.name);
cout << "Создана копия цветка: " << name << endl;
}
// Оператор присваивания
Flower& operator=(const Flower& other) {
if (this != &other) {
delete[] name;
num = other.num;
height = other.height;
name = new char[strlen(other.name) + 1];
strcpy(name, other.name);
}
return *this;
}
~Flower() {
cout << "Удален цветок: " << name << endl;
delete[] name;
}
void print() const {
cout << "Цветок: " << name << ", количество: " << num << ", высота: " << height << " см" << endl;
}
};
class Garden {
private:
Flower* f; // изменено с ссылки на указатель
public:
// Конструктор по умолчанию
Garden() : f(nullptr) {
cout << "Создан пустой сад" << endl;
}
// Деструктор
~Garden() {
cout << "Сад удален" << endl;
}
void add_flower(Flower& f1) {
f = &f1;
cout << "Цветок добавлен в сад" << endl;
}
void print() const {
if (f != nullptr) {
cout << "В саду находится: ";
f->print();
} else {
cout << "Сад пуст" << endl;
}
}
};
int main() {
SetConsoleOutputCP(65001);
SetConsoleCP(65001);
cout << "=== Задание 2.14 - Анализ ошибок ===" << endl;
cout << "\nИсходные ошибки в программе:" << endl;
cout << "1. В конструкторе Flower: параметры по умолчанию должны быть в конце" << endl;
cout << "2. В конструкторе Flower: имя параметра 'mm' не соответствует использованию 'nm'" << endl;
cout << "3. В классе Garden: член f объявлен как ссылка, но не инициализирован" << endl;
cout << "4. В функции add_flower: присваивание ссылки другой ссылке" << endl;
cout << "\nИсправленная программа:" << endl;
Garden g;
Flower f;
cout << "\nДобавление цветка в сад:" << endl;
g.add_flower(f);
cout << "\nСостояние сада:" << endl;
g.print();
cout << "\nСоздание дополнительных цветков:" << endl;
Flower f2(5, 30, "Tulip");
Flower f3(15); // используется значение по умолчанию для высоты и имени
cout << "\nРабота программы завершена успешно!" << endl;
return 0;
}
Соседние файлы в папке Лаба2
