Void main(). cout << "x = " << s.Getx() << "\n";

{

Sf s(1.0, 2.0, 3.0, 4.0);

cout << "x = " << s.Getx() << "\n";

cout << "Площа = " << s.pl() << "\n";

s.Setx(5.0); s.Setr(8.0);

cout << "x = " << s.Getx() <<"\n";

cout << "Площа = " << s. pl() << "\n";

}

 

Результат: х = 1

Площа = 201,062

х = 5

Площа = 804. 248

1.4 Конструктори і деструктори

 

Як вже наголошувалося конструктор призначений для ініціалізації об'єкту і викликається автоматично при його створенні. Основні властивості конструкторів:

1. Конструктор не повертає значення, навіть типу void. Не можна отримати вказівку на конструктор.

2. Клас може мати декілька конструкторів з різними параметрами для різних видів ініціалізації (при цьому використовується механізм перевантаження).

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

4. Параметри конструктора можуть мати будь-який тип, окрім цього ж класу. Можна задавати значення параметрів за умовчанням. Їх може містити тільки один з конструкторів.

5. Якщо програміст не вказав жодного конструктора, компілятор створює його автоматично. Такий конструктор викликає конструктори за умовчанням для полів класу і конструктори за умовчанням базових класів (див. розділ "Спадкування"). У разі, коли клас містить константи або посилання, при спробі створення об'єкту класу буде виведена помилка, оскільки їх необхідно ініціалізувати конкретними значеннями, а конструктор за умовчанням цього робити не вміє.

6. Конструктори не успадковуються.

7. Конструктори не можна описувати з модифікаторами const, virtual і static.

8. Конструктори глобальних об'єктів викликаються до виклику функції main. Локальні об'єкти створюються, як тільки стає активною зона їх дії. Конструктор запускається і при створенні тимчасового об'єкту (наприклад, при передачі об'єкту з функції).

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

 

ім’я_класу ім’я_об’єкту [(список параметрів)];

//Список параметрів не має бути порожнім

ім’я_класу (список параметрів);

//Створюється об'єкт без імені (список може бути порожнім)

ім'я класу ім’я_об’єкту = вираз;

//Створюється об'єкт без імені і копіюється

 

Приклади:

 

monstr Super(200, 300), Vasia(50), Z;

monstr X = monstr(1000);

monstr Y = 500;

 

У першому операторові створюються три об'єкти. Значення не вказаних параметрів встановлюються за умовчанням. У другому операторові створюється безіменний об'єкт із значенням параметра health = 1000 (значення другого параметра встановлюється за умовчанням). Виділяється пам'ять під об'єкт X, в яку копіюється безіменний об'єкт. У останньому операторові створюється безіменний об'єкт із значенням параметра health = 500 (значення другого параметра, це відноситься і до конструкторів, які є методами). Виділяється пам'ять під об'єкт Y, в яку копіюється безіменний об'єкт. Така форма створення об'єкту можлива в тому випадку, якщо для ініціалізації об'єкту допускається задати один параметр.

Методи можуть приймати аргументи по умовчанню. Це відноситься і до конструкторів, які є методами. Якщо в конструкторі Sf приймаються по умовчанню координати y = 2.0, z = 2.5, r = 1, тоді конструктор приймає вид:

 

Sf(float xk, float yk=2.0, float zk=2.5, float rk=1);

{x = xc; y = yc; z = zc; r = rk;}

 

Тепер можна створити змінну класу в такий спосіб:

 

Sf (1.0); // використання всіх аргументів по умовчанню;

Sf (1.0,1.1); //явно вказується координата y;

Sf (1.0,1.1,2.1,4.0); //скасовуються всі параметри по умовчанню.

 

Ви можете мати більш одного конструктора: це називається перепризначенням (перегрузкою) конструктора. Перегрузка дає функції можливість, використовуючи те ж саме ім’я, виконувати різноманітні дії. Використання того ж самого імені для функцій, що мають різноманітне число аргументів, або аргументи мають різноманітні типи, називається перегрузкою функції.

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

 

#include <iostream>

using namespace std;

 

#define M_PI 3.14159265358979323846

 








Дата добавления: 2014-12-26; просмотров: 705;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.