69708

Перевантаження конструкторів

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2014-10-09

27.5 KB

0 чел.

Тема 8: Перевантаження конструкторів

Конструктори можна перенавантажувати. Фактично їх-то і перенавантажують частіше за все. Для перевантаження конструктора існують три причини: гнучкість, можливість створення ініціалізованих (не ініціалізованих) об'єктів і конструкторів копіювання. Досить часто об'єкти класу можна створити декількома способами. Для кожного з цих способів можна визначити окремий варіант перевантаженого конструктора. Ці варіанти вичерпують всі можливості створити об'єкт — при спробі зробити це непередбаченим способом компілятор не знайде відповідного конструктора і видасть повідомлення про помилку.

Перевантажені конструктори набагато підвищують гнучкість класу. Вони дозволяють користувачу вибирати оптимальний спосіб створення об'єкту.Приклад програми, яка створює клас date для зберігання календарної дати. Туту конструктор перевантажений двічі.

#include <iostream>

#include <cstdio>

using namespace std;

class date

{

int day, month, year;

public:

date(char *d);

date(int m, int d, int у);

void show_date();

};

// Ініціалізація рядком.

date::date(char *d)

{

sscanf(d, "%d%*c%d%*c%d" &month &day &year);

}

date::date(int m, int d, int у)

{

day = d;

month = m;

year = у;

}

void date::show_date() {

cout << month << "/" << day;

cout << "/" << year << "\n";

}

int main()

{

date ob1(12, 4, 2001), ob2("10/22/2001");

ob1.show_date();

ob2.show_date() ;

return 0;

}

В цій програмі об'єкт класу date можна ініціалізувати двома способами. Задавши місяць, день і рік у вигляді трьох цілих чисел або у вигляді рядка mm/dd/yyyy. Обидва способи застосовуються досить часто тому має сенс передбачити два різні конструктори для створення об'єктів класу date.

Цей приклад ілюструє основну ідею, яка лежить в основі перевантажених конструкторів: вони дозволяють вибирати спосіб створення об'єктів, який краще всіх відповідає конкретній ситуації. Наприклад, користувач може ввести дату у вигляді массива s. Цей рядок можна відразу використовувати для створення об'єкту класу date. Для цього абсолютно не вимагається перетворювати її в інший вигляд. Проте, якби конструктор date() би не був перевантажений, рядок довелося б розбити на три цілі числа.

int main()

{

char s[80];

cout << "Введіть нову дату: ";

сіn >> s;

date d(s);

d.show_date();

return 0 ;

}

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


 

А также другие работы, которые могут Вас заинтересовать

8659. Общество, как система. Основные подсистемы общества 82.5 KB
  Философское понятие общества. Общество, как система. Основные подсистемы общества. Общество, как исторический процесс. Гражданское общество. Правовое государство. Формационная и цивилизационная концепции общественного развития...
8660. Древнекитайская философия 46.5 KB
  Древнекитайская философия. Особенности средневековой философии. Древнекитайская философия. - Конфуций - латинизированное название, буквально Кун-фу-цзы - старый учитель Кун. Конфуцианство возникает в 6 веке до н.э...
8661. Философия в системе культуры 21.22 KB
  Философия в системе культуры Понятие мировоззрения. Типы мировоззрения Особенности мифологического мировоззрения Признаки религиозного мировоззрения. 1. Понятие мировоззрения. Типы мировоззрения. Сущность и структура мировоззрения. - Мировоззрение...
8662. Сущность и предназначение философии 18.7 KB
  Сущность и предназначение философии. Особенность философского мировоззрения. Истоки философии. Семь мудрецов Предмет философии. Основной вопрос философии. Особенности философского мировоззрения. Философское мировоззрение прихо...
8663. Сущность и предназначение философии. Основные формы философского дискурса 19.7 KB
  Сущность и предназначение философии. Предмет философии. Основной вопрос философии. Разделы философии. Основные формы философского дискурса. Предмет философии. - предмет философии - это то, что она изучает, это угол зрени...
8664. История философии. Античная философия (6 в. До н.э. – 4 в н.э.). 25.62 KB
  История философии.Античная философия (6 в. До н.э. - 4 в н.э.). Основные этапы развития античной философии. Особенности ранней греческой философии. Милетская школа (Фалес, Анаксимандр, Анаксимен). Философия Гераклита. Диалекти...
8665. Ранняя греческая философия 23.06 KB
  Ранняя греческая философия Пифагор и Пифагорейский союз Философия элейской школы. Атомистическое учение Демокрита. Пифагор. Ввел в обиход слово философия (как любовь к мудрости). Связал философия с математикой. Поставил вопрос о числовой структуре...
8666. Античная философия классического периода 18.71 KB
  Античная философия классического периода. Философские идеи софистов. Сократ, его жизнь, учение и смерть. Философия Платона. Мир идей и мир вещей. Гносеология Платона. Платон о человеке и государстве. Философия софистов. - Соф...
8667. Философия Платона и Аристотеля 21.84 KB
  Философия Платона и Аристотеля. Онтология и гносеология Платона. Платон о человеке и государстве. Философия Аристотеля. Платон. - Платон - ученик Сократа и учитель Аристотеля. - В молодости увлекался поэзией. Но после диалога с Сократом с...