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.


 

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

49951. Вступ до теорії і методики викладання гімнастики 38 KB
  Стройові вправи. Стройові вправи: стройові прийоми шикування пересування Класифікація стройових вправ Стройові вправи класифікуються таким чином: стройові прийоми пересування шикування та перешикування розмикання та змикання див. Місце стройових вправ у загальній структурі уроку і їх значення Стройові вправи є одним із засобів гімнастики; однією із складових фізичного виховання дітей дошкільного віку школярів студентів а також підготовки допризивної молоді та військовослужбовців. Як правило стройові вправи застосовуються у...
49952. Расчет ветровой нагрузки 75 KB
  Эпюра средней скорости ветра и ветровая нагрузка Расчет волновой нагрузки на опорные колонны СПБУ при регулярном волнении Волновая нагрузка преграды с малыми относительно длины волны l размерами поперечного сечения может быть представлена как сумма скоростной Qск и инерционной Qин составляющих: Q = Qин Qск Однако учитывая что вопервых скоростная составляющая Qск при воздействии на форменные решетчатые конструкции является преобладающей т. Qск Qин и вовторых инерционная составляющая Qин во времени действует асинхронно по отношению к...
49954. Законы распределения случайных величин 413 KB
  Функция распределения x b. Функция плотности распределения вероятности: М. Нормальное распределение Плотность распределения: 45.
49955. АБСОРБЦИОННЫЙ МЕТОД ОПРЕДЕЛЕНИЯ МАКСИМАЛЬНОЙ ЭНЕРГИИ БЕТА-СПЕКТРА РАДИОНУКЛИДА 254.5 KB
  Соловьев АБСОРБЦИОННЫЙ МЕТОД ОПРЕДЕЛЕНИЯ МАКСИМАЛЬНОЙ ЭНЕРГИИ БЕТАСПЕКТРА РАДИОНУКЛИДА Практическое руководство Томск 2012 Утверждено ОМС 5 мая 1999г. Определение максимальной энергии бетаспектра радионуклида: Руководство к лабораторной работе. В руководстве рассмотрены методы идентификации радионуклидов с помощью определения максимальной энергии излучения.
49957. Методика навчання стройових вправ 95 KB
  Наприклад термiн Руки вперед припускає що руки повиннi бути прямими долонi всередину пальцi разом. Якщо треба назвати положення яке вiдрiзняється вiд традицiйного слiд його уточнити: Руки вперед долонi вниз пальцi нарiзно. Наприклад: €Шаг правою руки до плечей поворот голови направо€. Наприклад: €œДугами вперед руки в сторониâ.
49958. Вывод в консоль с использованием C# (Csharp) 104.5 KB
  Мы используем WriteLine где нам нужно для того чтобы вывести текст в окно консоли. У WriteLine есть родственница Write: Console.А теперь выведем текст на в новой строке Как видно разница между WriteLine и Write довольно очевидна. Когда вызываешь WriteLine текст автоматически выведется с новой строки.
49959. Создание простейшего триггера на языке PLSQL 238.5 KB
  Задание для самостоятельной работы на лабораторную работу: Сделать всё по методичке, но по своей таблице, выполненной в первой лабораторной работе