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. Статичні члени класу.