Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба2 / Laba 2 (16)
.cpp#include <iostream>
#include <windows.h>
using namespace std;
// Пример класса, где копирование недопустимо
class NonCopyable {
private:
int* data;
// Запрещаем копирование
NonCopyable(const NonCopyable&);
NonCopyable& operator=(const NonCopyable&);
public:
NonCopyable(int value) {
data = new int(value);
cout << "Создан NonCopyable объект со значением: " << value << endl;
}
~NonCopyable() {
delete data;
cout << "NonCopyable объект удален" << endl;
}
int getValue() { return *data; }
};
// Пример класса с обычным копированием
class Copyable {
private:
int value;
public:
Copyable(int v = 0) : value(v) {
cout << "Создан Copyable объект со значением: " << value << endl;
}
// Конструктор копирования
Copyable(const Copyable& other) : value(other.value) {
cout << "Вызван конструктор копирования Copyable" << endl;
}
int getValue() { return value; }
};
// Ситуации вызова конструктора копирования:
void func1(Copyable c) { // 1. Передача по значению
cout << "В func1: значение = " << c.getValue() << endl;
}
Copyable func2() { // 2. Возврат по значению
Copyable c(20);
return c;
}
int main() {
SetConsoleOutputCP(65001);
cout << "=== Задание 2.16 - Конструктор копирования ===" << endl;
Copyable c1(10);
cout << "\nСитуации вызова конструктора копирования:" << endl;
cout << "1. Инициализация:" << endl;
Copyable c2 = c1;
cout << "2. Прямой вызов:" << endl;
Copyable c3(c1);
cout << "3. Передача в функцию по значению:" << endl;
func1(c1);
cout << "4. Возврат из функции по значению:" << endl;
Copyable c4 = func2();
cout << "\nПример класса, где копирование недопустимо:" << endl;
NonCopyable nc1(5);
// NonCopyable nc2 = nc1; // Ошибка - копирование запрещено
cout << "Попытка копирования объекта NonCopyable приведет к ошибке компиляции" << endl;
return 0;
}
Соседние файлы в папке Лаба2
