Методы по умолчанию в C ++ с примерами
Опубликовано: 29 Декабря, 2021
Если мы напишем класс, в котором нет методов, и этот класс не наследуется от другого класса, компилятор автоматически добавит к нему шесть методов. Компилятор может автоматически сгенерировать следующие методы:
- Конструктор по умолчанию: эквивалент пустого конструктора по умолчанию. Конструктор по умолчанию - это конструктор, который можно вызывать без аргументов. Он вызывается, когда экземпляр создается без инициализации.
имя_класса имя_объекта;
Рассмотрим класс, производный от другого класса с конструктором по умолчанию, или класс, содержащий другой объект класса с конструктором по умолчанию. Компилятору необходимо вставить код для вызова конструкторов по умолчанию для базового класса / встроенного объекта.
#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
- Деструктор: эквивалент пустого деструктора. Он вызывает деструктор суперкласса и деструкторы для полей-членов, которые не относятся к примитивному типу. Общая форма объявления деструктора следующая:
имя_класса :: ~ имя_класса;
Пример для деструктора:
#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 Деструктор называется
РЕКОМЕНДУЕМЫЕ СТАТЬИ