Конструктори та деструктори, задані за умовчанням

Якщо ви не оголосите конструктора або деструктора, то компілятор зробить це за вас. Стандартні конструктор та деструктор не приймають аргументів і не виконують жодних дій.

Питання та відповіді: Конструктор називається стандартним через відсутність аргументів або через те, що створюється компілятором у тому випадку, якщо в класі не оголошується ніякий інший конструктор?

Стандартний конструктор, або за замовчуванням конструктор, характеризується тим, що не приймає жодних аргументів, причому неважливо, чи створений цей конструктор автоматично компілятором або самим програмістом. Стандартний конструктор завжди використовується за умовчанням.

Однак щодо деструкторів, то тут є свої відмінності. Стандартний деструктор надається компілятором. Оскільки всі деструктори немає параметрів, то головною відмінністю стандартного деструктора і те, що не виконує жодних дій, тобто. має пусте тіло функції.

Використання конструктора, заданого за умовчанням

Cat Rags; // Rags не отримує жодних параметрів

необхідно мати наступний конструктор:

Конструктор викликається щодо об'єкта класу. Якщо створення об'єкта класу Cat слід передати два параметра, то конструктор класу Cat визначається так:

Якщо конструктор приймає один параметр, визначення об'єкта матиме такий вигляд:

У разі коли конструктор взагалі не приймає параметрів (тобто є стандартним), відпадає необхідність використання круглих дужок:

Цей випадок є винятком із правила, що каже, що всі функції вимагають наявності круглих дужок, навіть якщо вони зовсім не приймають параметрів. Ось чому можна спокійно записати таке визначення:

Цязапис інтерпретується як звернення до стандартного конструктора. У ній відсутня передача параметрів та, як наслідок, круглі дужки.

Зверніть увагу, що ви не повинні постійно використовувати стандартний конструктор, який надається компілятором. Завжди можна написати свій стандартний конструктор, тобто. конструктор без параметрів. Ви можете наділити свій стандартний конструктор тілом функції, в якому виконуватиметься ініціалізація класу.

У лістингу 6.4 у знайомий вже вам клас Cat додані конструктор та деструктор. Конструктор використовується для ініціалізації об'єкта Cat і встановлення його віку рівним значенню, що надається вами. Зверніть увагу на те, де програми викликається деструктор.

Листинг 6.4. Використання конструкторів та деструкторів.

2: // деструктора в класі Cat

4: #include // для об'єкта cout

8: public: // початок відкритого розділу

9: Cat(int initialAge); // конструктор

11: int GetAge(); // метод доступу

12: void SetAge (int age); // метод доступу

14: private: // початок закритого розділу

15: int itsAge; // змінна-член

18 // конструктор класу Cat

19: Cat::Cat(int initialAge)

21: itsAge = initialAge;

Cat() // деструктор, який не виконує дій

28: // GetAge, відкрита функція забезпечення доступу,

29: // Повертає значення змінної-члена itsAge

30: int Cat::GetAge()

32: відновити йогоAge;

35: // Визначення SetAge, відкритої

36: // функції забезпечення доступу

38: voidCat::SetAge(int age)

40: // встановлюємо змінну-член itsAge рівної

41: // Значення, передане параметром age

45: // Визначення методу Meow

46:// Повертає void

47: // параметрів немає

48: // використовується для виведення на екран тексту "Meow"

49: void Cat::Meow()