Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
01.11.2025
Размер:
2.84 Кб
Скачать
#include <iostream>
#include <windows.h>
using namespace std;

// Класс с конструктором по умолчанию
class DefaultConstructor {
private:
    int value;
    
public:
    // Конструктор по умолчанию
    DefaultConstructor() : value(0) {
        cout << "Вызван конструктор по умолчанию" << endl;
    }
    
    // Параметризованный конструктор
    DefaultConstructor(int v) : value(v) {
        cout << "Вызван параметризованный конструктор" << endl;
    }
    
    int getValue() { return value; }
};

// Ситуации работы конструктора (не копирования):
// 1. Создание объекта без параметров
// 2. Создание объекта с параметрами

// Условия, когда конструктор копирования не создается по умолчанию:
// - Если определен любой другой конструктор (компилятор не генерирует конструктор по умолчанию)
// - Если класс содержит ссылки или константные члены

class NoDefaultCopy {
    int& ref; // ссылка
    const int constValue; // константа
    
public:
    NoDefaultCopy(int& r, int cv) : ref(r), constValue(cv) {
        cout << "Создан NoDefaultCopy объект" << endl;
    }
    // Конструктор копирования должен быть определен явно
};

int main() {
    SetConsoleOutputCP(65001);
    
    cout << "=== Задание 2.17 - Конструкторы ===" << endl;
    
    cout << "\nСитуации работы конструктора (не копирования):" << endl;
    
    cout << "1. Создание объекта без параметров:" << endl;
    DefaultConstructor dc1;
    
    cout << "2. Создание объекта с параметрами:" << endl;
    DefaultConstructor dc2(10);
    
    cout << "\nУсловия, когда конструктор копирования не создается по умолчанию:" << endl;
    cout << "- Если определен любой другой конструктор" << endl;
    cout << "- Если класс содержит ссылки или константные члены" << endl;
    
    int x = 5;
    cout << "\nПример класса с ссылками и константами:" << endl;
    NoDefaultCopy ndc(x, 10);
    cout << "Этот класс требует явного определения конструктора копирования" << endl;
    
    return 0;
}
Соседние файлы в папке Лаба2