69715

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

Лекция

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

Як відомо, при збільшенні покажчика на одиницю він переміщається на наступний елемент того ж типу. Наприклад, цілочисельний покажчик посилатиметься на наступне ціле число. Як правило, адресна арифметика залежить від типу покажчика. (Інакше кажучи, вона залежить від типа даних, на які посилається покажчик.).

Украинкский

2014-10-09

27.5 KB

0 чел.

Тема 5: Вказівники на об'єкти

Покажчики можуть посилатися не тільки на змінні вбудованих типів, але і на об'єкти. Для доступу до членів класу через покажчик на об'єкт використовується оператор  "->" , а не ".". Проілюструємо це за допомогою наступної програми.

#include <iostream>

using namespace std;

class cl {

int і;

public:

cl(int j) { i=j; }

int get_i() { return і; }

};

int main()

cl ob(88), *p;

p = &ob;   // Одержуємо адресу об'єкту ob.

cout << p->get_i(); // для виклику функції get_i() // застосовується оператор ->

return 0 ;

}

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

Покажчику можна привласнити адресу відкритого члена об'єкту, а потім посилатися на цей член з його допомогою. Розглянемо наступну програму, яка виводить на екран число 1.

#include <iostream>

using namespace std;

class cl {

public:

int   i;

cl (int j) { i=j;}

int main ()

{

cl ob(l);

int   *p;

p = &ob.i;    // Отримати адресу члена ob.i.

cout << *p;  // Звернення до члена ob.i через покажчик р

return 0;

}

Оскільки покажчик р посилається на ціле число, він має тип int. В даному випадку не має значення, що змінна є членом об'єкту ob.

Передача посилань на об'єкти

При передачі об'єкту як параметр функції створюється його копія. Після закінчення роботи функції викликається деструктор копії. Проте, якщо параметр викликається за допомогою посилання, копія об'єкту не створюється. Це значить, що після повернення управління параметр функції не знищується і деструктор не викликається. Приклад:

#include <iostream>

using namespace std;

class cl {

int id;

public:

int і ;

cl(int i);

~cl();

void neg(cl &o) { o.i = -o.i; }// Тимчасовий об'єкт не створюється

};

cl::cl(int num)

{

cout << "Створення об'єкту " << num << "\n";

id = num;

}

cl::~cl()

{

cout << "Знищення об'єкту " << id << "\n";

}

int main()

{  

cl о(l);

о. і  =   10;

о. neg(о);

cout <<  о. і  <<   " \n" ;

return   0;

}


 

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

63721. Коммерческие юридические лица 15.41 KB
  Учредители передавая имущество во вклады утрачивают право собственности на это имущество. Создаются такие предприятия как правило публичными собственниками сохраняющими за собой право собственности на переданное имущество.
63722. Некоммерческие юридические лица 14.37 KB
  Некоммерческие юридические лица Общая характеристика некоммерческих юридических лиц заключается в том что они не имеют в качестве основной цели своей деятельности получение прибыли а так же не в праве распределять полученную прибыль между своими участниками.
63727. Формы собственности 15.96 KB
  Собственность –основа экономической системы. Собственность может быть государственной и частной Формы собственности: Государственная Коллективная Частная Собственность др. государств и международных организаций Совместная собственность Смешанная собственность...
63728. Понятие и содержание обязательств 15.15 KB
  Обязательственное право в широком смысле это часть гражданского права один из важнейших его институтов. Под обязательственным правом следует понимать совокупность гражданско-правовых норм регулирующих общественные отношения по перемещению материальных...
63729. Основания возникновения обязательств 13.54 KB
  Определенный круг отношений возникающих между субъектами гражданского права именуется обязательствами. По особенностям возникновения все обязательства делятся на договорные и внедоговорные. Договорные обязательства возникают на основе двух или многосторонних сделок...