Cтатичні члени класів і статичні класні функції. Не можна зрозуміти багато деталей роботи з масивами в C#, якщо не знати пристрій класу Array з бібліотеки FCL

Клас Array

Не можна зрозуміти багато деталей роботи з масивами в C#, якщо не знати пристрій класу Array з бібліотеки FCL, нащадками якого є всі класи-масиви. Розглянемо наступні оголошення:

//Клас Array

int[] ar1 = new int[5];

double[] ar2 ={5.5, 6.6, 7.7};

int[,] ar3 = new Int32[3,4];

Задамося природним запитанння: до якого або до яких класів належать об'єкти ar1, ar2 й ar3? Відповідь проста: всі вони належать до різних класів. Змінна ar1 належить до класу int[] - одномірному масиву значень типу int, ar2 - double[] - одномірному масиву значень типу double, ar3 - двовимірному масиву значень типу int. Наступне закономірне питання: а щозагального є в цих трьох об'єктів? Насамперед, всі три класи цих об'єктів, як й інші класи, є нащадками класу Object, а тому мають загальні методи, успадковані від класу Object і доступні об'єктам цих класів.

 

11. Статичні члени класу

Cтатичні члени класів і статичні класні функції

Доповнимо клас Employee визначенням вільного ідентифікаційного коду службовця. Самий простий спосіб — оголосити його статичною змінною:

static unsigned int currentId;

інкапсулювавши її клас, для чого її оголошення розміщується в його інтерфейсі. Як ми пам'ятаємо, атрибути ініціалізуються особливо. Звичайні атрибути — при створенні об'єкта. Статичний атрибут спільний для всіх об'єктів класу, а тому ідентифікується без посилання на об'єкт і створюється компонувальником за його визначенням, яке розміщується у файлі реалізації

unsigned int Employee :: currentId = 0;

Відповідних змін може зазнати конструктор, в якому тепер стане на параметр менше. Залежно від обставин ним може виявитися додатково довизначений конструктор

 

12. Поняття перевантаження функції . Правила перевантаження функції. Приклади перевантаження функції – методів класу ( конструкторів). Аргументи за замовчуванням .

 

Перевантаження функції - можливість у різноманітних мовах програмування, що дозволяє створювати кілька реалізацій функції(09051004010031000102000018методу) із тим же ім'ям проте з різною сигнатурою — з різною кількістю параметрів або з різним типом параметрів

 

Для того, щоб коректно використовувати механізм перевантаження функції небхідно дотримуватись правил:

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

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

Приклад 1.3.8

#include <math>

#include <iostream>

double square(double);

double square(double,double);

double square(double,double,double);

main()

{

std::cout<<"Площа круга"<<square(1)<<'\n';

std::cout<<"Площа прямокутника"<<square(1,2)<<'\n';

std::cout<<"Площа трикутника"<<square(1,2,3)<<'\n';

}

double square(double d1){

return 3.14*d1*d1;

}

double square(double d1,double d2){

return d1*d2;

}

double square(double d1,double d2,double d3){

double p =(d1+d2+d3)/2;

return sqrt(p*(p-d1)*(p-d2)*(p-d3));

}

Аргументи за замовчуванням

Функції з аргументами по замовчуванні. В С++ вперше з'явилась можливість використання нового типу аргумента. Цей аргумент можна явно не вказувати, оскільки компілятор, в разі потреби, сам присвоїть йому значення. Якщо необхідно передати нове значення, то це здійснюється явно у виклику функції. Так визначений параметер функції називається параметром з аргументом по замовчуванні.

Іншими словами, технологія використання параметрів з аргументами по замовчуванні полягає у слідуючому: щоб передати параметру аргумент по замовчуванні, треба в оголошені функції прирівняти параметер до того значення, яке треба передати, якщо при викликуфункції відповідний аргумент не буде вказаний явно

Використовуючи аргументи по замовчуванні треба дотримуватись двох правил:

а) коли параметру призначається аргумент по замовчуванні, то й усім наступним параметрам треба призначати параметри по замовчуванні; усі звичайні параметри оголошуються попереду параметрів з аргументами по замовчуванні;

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

 

13. Перевантаження функцій та неоднозначність

14. Поняття дружності. Дружні функції. Дружні класи.

Властивість дружності (модифікатор friend) з'явилась з метою забезпечення необмеженого доступу до членів класу. Дружній клас або дружня функція мають доступ до будь-яких членів класу незалежно від свого оголошення.

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

Дружні функції – це функції, які не являються членами класу, хоча записуються у визначенні класу. Позначається словом Friend і записується в public

Дружні класи – це класи, що дозволяють надати повний доступ до членів свого класу. Для цього досить включити в оголошенні класу ім’я іншого класу, що оголошують дружнім.

 

15. Статичні члени класу.