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.


 

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

7800. Реформы Петра 1 29.5 KB
  Реформы Петра 1. Преобразования в сфере культуры Пётр I изменил начало летосчисления с так называемой византийской эры (от сотворения Адама) на от Рождества Христова. 7208 год по византийской эре стал 1700 годом от Рождества Христова. Однако...
7801. Советская школа в годы ВОВ и послевоенные годы(1941-58гг.) 25 KB
  Советская школа в годы ВОВ и послевоенные годы(1941-58гг.). Война затормозила осуществление всеобщего обязательного семилетнего обучения. Развертыванию всеобщего обучения препятствовали перемещения населения из западных районов в восточные, уход учи...
7802. Советская школа в период с 1921 по 1930гг 25.5 KB
  Советская школа в период с 1921 по 1930гг. По окончании гражданской войны советский народ приступил к мирному строительству, которое осуществлялось в трудных условиях хоз. разрухи и голода. Надо было немедленно восстановить промышленность, поднять с...
7803. Советская школа в период с 1930 по 1940гг 26 KB
  Советская школа в период с 1930 по 1940 гг. Советское правительство принимает ряд постановлений о школе, которые определили ход ее дальнейшего развития, направления в перестройке ее учебно-воспитательной работы, а также новые теоретические достижения...
7804. Советская школа и педагогика в 1945-1964 27 KB
  Советская школа и педагогика в 1945-1964 Реформы коснулись и народного образования. Получили развитие школы рабочей молодежи. Были увеличены масштабы подготовки рабочих через школы фабрично-заводского обучения, ремесленные и железнодорожные уч...
7805. Советская школа и педагогика в сер. 60-х - н. 90х годов 25.5 KB
  Советская школа и педагогика в сер. 60-х - н. 90х годов Советская школа в период с 1958 по 1992г. В 1958г. был принят закон об укреплении связи школы с жизнью и о дальнейшем развитии системы народного образования, который установил в нашей ст...
7806. Становление коммунистической системы воспитания и образования в России после Октябрьской революции 33.5 KB
  Становление коммунистической системы воспитания и образования в России после Октябрьской революции Революционная перестройка школы. Первые декреты Советской власти по народному образованию и проведение их в жизнь. Великая Октябрьская социалистическа...
7807. Сухомлинский и Корчак и их педагогические идеи 30 KB
  Сухомлинский и Корчак и их педагогические идеи Сухомлинский создал оригинальную педагогическую систему, основывающуюся на принципах гуманизма, на признании личности ребёнка высшей ценностью, на которую должны быть ориентированы процессы воспитания и...
7808. Тенденции развития образования в современном мире 39.5 KB
  Тенденции развития образования в современном мире Состояние образования в современном мире сложно и противоречиво. С одной стороны, образование в 20-м веке стало одной из самых важных сфер человеческой деятельности огромные достижения в этой област...