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

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

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

Distance dist;

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

Однак в деяких випадках на момент написання програми нам невідома кількість об’єктів, які необхідно створити. Тоді ми можемо використати операцію new для створення об’єктів під час роботи програми. Як ми бачили, операція new повертає вказівник на неіменований об’єкт. Розглянемо два підходи до створення об’єктів на прикладі програми 20.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;

}

Програма 20.17

 

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

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

disptr.getdist();

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

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

(*disptr).getdist();

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

distptr->getdist();

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

Distance& dist=*(new Distance);

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

 








Дата добавления: 2015-08-26; просмотров: 1228;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.