Класи та об’єкти

Для вирішення цього завдання потрібно створити клас «цілих» комплексних чисел з наступними private - полями: Також потрібно реалізувати конструктори 3-х типів:

• GaussNumber(); Конструктор без параметрів. Цей конструктор також називаєтьсядефолтним конструктором (default constructor)абоконструктор за умовчанням. Якщо не оголошено жодного конструктора, то при компіляції саме цей конструктор буде створено автоматично.NB!Він створюється автоматично тільки якщо не створено жодного конструктора.

• GaussNumber(int re); Конструктор з одним параметром

• GaussNumber(int re, int im); Конструктор із двома параметрами.

2. Ініціалізація полів у визначенні конструктора

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

3. Деструктор

4. Конструктор копіювання

5. Оператор присвоєння

6. Ліричний відступ: як компілюється виклик функції A.add(B)

7. Метод add

Цей код можна покращити за допомогою слова const. При такому записі ми уникаємо можливості випадково змінити параметр, що передається в тілі методу (тепер N точно не змінюється). Якщо ми випадково напишемо N.myRe = 10, код не скомпілюється та компілятор видасть помилку, що не можна міняти поле константного об'єкта.

8. Ключове слово const

Ключове слово const у різних контекстах має різні значення, але загальний зміст у тому, що воно забороняє зміну чогось. Щойно ми побачили, ключове слово constможе бути використане для передачі параметра. Але це єдиний спосіб застосування цього ключового слова. Нижче наведено цю та інші можливості.

• УУ цьому випадку слово const забороняє змінювати параметр об'єкта, у якого воно викликається. Майже завжди об'єкти краще передавати за константним посиланням, щоб уникнути його ненавмисної зміни. Наприклад, за замовчуванням оператор присвоювання працює з константним посиланням, так само як і конструктор копіювання:

• У значення, що повертаєтьсяУ цьому випадку слово const забороняє змінювати значення методу, у якого воно викликається. Наприклад, за умовчанням оператор присвоювання повертає також константне посилання. У такому разі, ми не зможемо випадково змінити значення, що повертається в тілі методу.

• ПоляУ цьому випадку слово const забороняє змінювати поле класу, у якого воно викликається. Використовуємо приклад попередньої лекції: Припустимо, що ми хочемо заборонити змінювати розмір масиву в процесі роботи програми. Для цього можна просто зробити поле mySize константним:

const int mySize;

Такий запис означає, що поле mySize не можна змінювати. Ключове слово const означає, що ми ніде не можемо написати, наприклад, mySize = 10 . Але для початку все-таки треба надати цьому полю значення. У такому разі ініціалізація полів у визначенні конструктора є необхідною (див. вище). Array::Array(int mySize) : mySize(size) <>

int getValue (int index) const; //Метод, який повертає значення певного елемента масиву

Якщо ми випадково напишемо у цьому методі mySize = 10, то компілятор видасть помилку про те, що не можна змінювати поля цього класу.