русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Конструктор копіювання за замовчуванням


Дата додавання: 2014-04-22; переглядів: 1082.


Ми розглянули два способи ініціалізації об’єктів. Конструктор без аргументів може ініціалізувати поля об’єкту константними значеннями, а конструктор, що має хоч один аргумент, може ініціалізувати поля значеннями, переданими йому як аргументи. Розглянемо третій спосіб ініціалізації об’єкту, що використовує значення полів вже існуючого об’єкта. Для цього не потрібно самим створювати спеціальний конструктор, оскільки такий конструктор надається компілятором для кожного існуючого класу і називається копіюючим конструктором за замовчуванням. Копіюючий конструктор має єдиний аргумент, який є об’єктом такого ж класу, що й конструктор. Програма 9.6 демонструє використання копіюючого конструктора за замовчуванням.

#include <iostream.h>

#include <conio.h>

#include <bios.h>

class Distance

{private:

int feet;

float inches;

public:

 

Distance():feet(0),inches(0.0) //Конструктор без аргументів

{cout<<”c1”<<endl; }

 

//Конструктор з 2 аргументами

Distance(int ft,float in):feet(ft),inches(in)

{cout<<”c2”<<endl;}

 

void getdist()

{cout <<”\nВведіть число футів “; cin >>feet;

cout << “Дюймів “; cin>>inches;

}

 

void showdist()

{cout <<feet << “\’ “<< inches <<”\’’”;}

};

 

 

int main()

{

clrscr();

Distance dist1(11,6.25); //конструктор з 2 аргументами

Distance dist2(dist1); //два конструктори з одним аргументом

Distance dist3=dist1;

cout <<”\ndist1=”;dist1.showdist();

cout << “\ndist2=”;dist2.showdist();

cout << “\ndist3=”;dist3.showdist();

cout <<endl;

bioskey(0);

return 0;

}

Програма 9.6

Ми ініціалізували об’єкт dist1 за допомогою конструктора з двома аргументами. Потім ми визначаємо ще два об’єкти класу Distance з іменами dist2 і dist3, вони обидва ініціалізуються значенням об’єкту dist1. В обох випадках був викликаний копіюючий конструктор за замовчуванням. Об’єкт dist2 ініціалізований за допомогою оператора:

Distance dist2(dist1);

Дія копіюючого конструктора за замовчуванням зводиться до копіювання значень полів об’єкту dist1 у відповідні поля об’єкту dist2. Як це не дивно, але ідентичні дії для пари об’єктів dist1 і dist3 виконуються за допомогою операторів:

Distance dist3=dist1;

Можна подумати, що даний оператор виконує операцію присвоювання, але насправді це не так. Тут, як і в попередньому випадку викликається конструктор копіювання за замовчуванням. Обидва оператори виконують одинакові дії і рівноправні у використанні. Можемо переконатися в цьому, запустивши програму 9.6 на виконання.

 


<== попередня лекція | наступна лекція ==>
Об’єкти в якості аргументів | Об’єкти, що повертаються функцією


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн