русс | укр

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

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


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


Вказівники на об’єкти


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


Вказівники можуть вказувати на об’єкти так само, як і на прості типи даних чи масиви.

Раніше ми часто писали оголошення об’єктів у вигляді

Distance dist;

де визначений об’єкт класу Distance.

Однак в деяких випадках на момент написання програми нам невідома кількість об’єктів, які необхідно створити. Тоді ми можемо використати операцію new для створення об’єктів під час роботи програми. Як ми бачили, операція new повертає вказівник на неіменований об’єкт. Розглянемо два підходи до створення об’єктів на прикладі програми 12.17.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

class Distance

{private:

int feet;

float inches;

public:

void getdist()

{cout<<"\nВведіть фути";cin>>feet;

cout<<"\nВведіть дюйми";cin>>inches;

}

void showdist()

{cout<<feet<<"\'="<<inches<<'\"';}

};

/////////////

int main()

{clrscr();

Distance dist;

dist.getdist();

dist.showdist();

 

Distance* distptr;

distptr=new Distance;

distptr->getdist();

distptr->showdist();

cout<<endl;

bioskey(0);

return 0;

}

Програма 12.17

 

Перший об’єкт в цій програмі створюється звичайним способом, натомість другий – з використанням операції new, яка повертає вказівник на нього.

Виникає питання: як ми посилаємося на методи класу з об’єкту, на який вказує disptr? Звичний для нас синтаксис з використанням крапки

disptr.getdist();

працювати не буде: операція крапки вимагає, щоб ідентифікатор зліва був змінною. Оскільки disptr – вказівник на змінну, то в цьому випадку використовується інший синтаксис. Це інший випадок використання операції розіменування (операції одержання вмісту змінної, на яку вказує вказівник.

Допустимим є такий спосіб:

(*disptr).getdist();

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

distptr->getdist();

Існує інший спосіб створення нового об’єкту, який дозволяє використовувати операцію крапки:

Distance& dist=*(new Distance);

але він використовується рідше.

 


<== попередня лекція | наступна лекція ==>
Клас String з використанням операції new | Масив вказівників на об’єкти


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