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;