68946

Покажчик this

Лекция

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

При виклику функції-члена їй неявно передається покажчик на зухвалий об’єкт. Цей покажчик називається this. Розглянемо програму, в якій описаний клас pwr, призначений для обчислення ступеня деякого числа.

Украинкский

2016-08-04

29 KB

0 чел.

Лекція № 8

Тема: Вказівник this

При виклику функції-члена їй неявно передається покажчик на зухвалий об'єкт. Цей покажчик називається this. Розглянемо програму, в якій описаний клас pwr, призначений для обчислення ступеня деякого числа.

#include <iostream>

using namespace std;

class pwr {

double b;

int e;

double val; public:

pwr(double base, int exp);

double get_pwr() { return val; }

};

pwr::pwr(double base, int exp)

{

b = base;

e = exp;

val = 1;

if(exp==0) return;

for( ; exp>0; exp--) val = val * b;

};

int main() {

pwr x(4.0, 2), у(2.5, 1), z(5.7, 0);

cout « x.get_pwr() « " ";

cout « у.get_pwr () « " "; cout « z.get_pwr() « "\n";

return 0;

}

Усередині класу до функції-члена можна звертатися безпосередньо, не використовуючи об'єкти і назву класу. Таким чином, усередині конструктора pwr () оператор

b = base;

означає, що змінною b, що належить зухвалому об'єкту, привласнюється значення змінної base. Проте того ж самого оператора можна переписати інакше.

this->b = base;

Покажчик this посилається на об'єкт, що викликає функцію pwr(). Таким чином, вираз this->b посилається на змінну b, що належить поточному об'єкту. Наприклад, якщо функція pwr() викликана об'єктом х, то покажчик this в попередньому операторові посилатиметься на об'єкт х. Втім, цього оператора можна записати в скороченому вигляді, не використовуючи покажчик this.

Розглянемо повне визначення конструктора pwr (), написане за допомогою покажчика this.

pwr::pwr(double base,   int exp){

this->b = base;

this->e = exp;

this->val  =  1;

if(exp==0)   return;

for(   ;   exp>0;   exp--)

this->val  =  this->val   *  this->b; }

Насправді жоден програміст на мові C++ не стане писати конструктор таким чином, оскільки скорочена форма набагато простіша. Проте покажчик this дуже важливий при перевантаженні операторів, а також в ситуаціях, коли функція-член повинна використовувати покажчик на зухвалий об'єкт.

Пам'ятаєте, що покажчик this автоматично передається всім функціям-членам.

Отже, функцію get_pwr () можна переписати інакше.

double get_pwr()   {  return  this->val;   }

В цьому випадку, якщо функція get_pwr () викликається за допомогою оператора

у.get_pwr() ;

покажчик this посилатиметься на об'єкту. На закінчення зробимо два важливі зауваження. По-перше, дружні функції ( не є функціями-членами, і, отже, їм не передається покажчик this. По-друге, статичні функції-члени також не отримують покажчик this.


 

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

58882. Складносурядне речення, його будова і засоби зв’язку в ньому 33.5 KB
  Передаючи мікрофон по ряду ланцюжком діти дають відповіді на запитання з розділу Синтаксису і Морфології: Що вивчає Синтаксис Яке речення називається простим Яке речення називається складним Які типи складних речень ви знаєте Що таке сполучник...
58883. Словесний портрет літературного героя 55.5 KB
  Мета: Поглибити знання учнів про портрет навчити розрізняти портрет як жанр живопису та літературний опис зовнішності персонажа; розширити портретну лексику учнів; розвивати творчу уяву логічне мислення усне мовлення...
58884. Організаційний момент на уроці української мови та літератури: теорія, практика, інновації 202.5 KB
  Сукупність методів і прийомів на кожному етапі уроку складає мікроструктуру уроку. Вона є дуже мобільною. Розробка її з позиції досягнення найбільшої адекватності у кожній конкретній ситуації дозволяє гнучкіше використовувати всю структуру того чи іншого типу уроку.
58885. Основа словесної творчості учнів 34 KB
  Мета: розширити уявлення учнів про історичне минуле про мудрість і розважливість Ярослава Мудрого; збагачувати словниковий запас школярів; виробляти в учнів уміння самостійно аналізувати та робити висновки; виховувати у школярів зацікавленість до історичного минулого нашого народу.
58886. Вплив алкоголю, наркотиків на нервову систему і поведінку людини 55.5 KB
  Чому наше колесо не кругле чому не котиться рівно і плавно по життю Що вам заважає Зверніть увагу на фактори що впливають на формування здоров’я....
58888. Шлях до Перемоги. Тематична екскурсія 73 KB
  План Барбаросса відповідно до якого війна на сході мала розпочатися відразу після весняного бездоріжжя і закінчитися до настання зимових холодів тобто протягом травня-листопада 1941 року.
58889. Загальновійськова підготовка. Стройові прийоми і рух без зброї 39.5 KB
  За підготовчою командою слід подати корпус трохи впередперенести вагу тіла більше на праву ногузі збереженням рівноваги; за виконавчою командою почати рух з лівої ноги повним кроком. Під час руху стройовим кроком голову та корпус тримати прямо дивитись вперед.
58890. 9-ти этажный монолитный жилой дом 4.02 MB
  Массовое монолитное домостроение переходит от кустарной технологии и мизерных объёмов к современным методам возведения и поточному строительству. В условиях рыночных отношений, при дефиците жилья и социально культурных объектов в России, у этого эффективного метода домостроения несомненно большие перспективы.