Методы по умолчанию в C ++ с примерами

Опубликовано: 29 Декабря, 2021

Если мы напишем класс, в котором нет методов, и этот класс не наследуется от другого класса, компилятор автоматически добавит к нему шесть методов. Компилятор может автоматически сгенерировать следующие методы:

  1. Конструктор по умолчанию: эквивалент пустого конструктора по умолчанию. Конструктор по умолчанию - это конструктор, который можно вызывать без аргументов. Он вызывается, когда экземпляр создается без инициализации.
    имя_класса имя_объекта;
    

    Рассмотрим класс, производный от другого класса с конструктором по умолчанию, или класс, содержащий другой объект класса с конструктором по умолчанию. Компилятору необходимо вставить код для вызова конструкторов по умолчанию для базового класса / встроенного объекта.

    #include <iostream>
    using namespace std;
    class Base {
    public :
    // compiler "declares" constructor
    };
    class A {
    public :
    // User defined constructor
    A()
    {
    cout << "A Constructor" << endl;
    }
    // uninitialized
    int size;
    };
    class B : public A {
    // compiler defines default constructor of B, and
    // inserts stub to call A constructor
    // compiler won't initialize any data of A
    };
    class C : public A {
    public :
    C()
    {
    // User defined default constructor of C
    // Compiler inserts stub to call A's construtor
    cout << "C Constructor" << endl;
    // compiler won't initialize any data of A
    }
    };
    class D {
    public :
    D()
    {
    // User defined default constructor of D
    // a - constructor to be called, compiler inserts
    // stub to call A constructor
    cout << "D Constructor" << endl;
    // compiler won't initialize any data of 'a'
    }
    private :
    A a;
    };
    int main()
    {
    Base base;
    B b;
    C c;
    D d;
    return 0;
    }
    Выход:
    Конструктор
    Конструктор
    Конструктор C
    Конструктор
    Конструктор D
    
  2. Деструктор: эквивалент пустого деструктора. Он вызывает деструктор суперкласса и деструкторы для полей-членов, которые не относятся к примитивному типу. Общая форма объявления деструктора следующая:
    имя_класса :: ~ имя_класса;
    

    Пример для деструктора:

    #include <iostream>
    using namespace std;
    class Example {
    private :
    int a, b;
    public :
    // Constructor
    Example()
    {
    cout << "Constructor is called"
    << endl;
    a = 10;
    b = 20;
    }
    // Destructor
    ~Example()
    {
    cout << "Destructor is called"
    << endl;
    }
    // Member function
    void print()
    {
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    }
    };
    int main()
    {
    // Object created
    Example obj; // Constructor Called
    // Member function called
    obj.print();
    return 0;
    }
    Выход:

    Конструктор называется
    а = 10
    б = 20
    Деструктор называется
    
    C++