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.


 

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

12719. ПОТОЧНЫЕ МЕТОДЫ ОРГАНИЗАЦИИ ПРОИЗВОДСТВА 194 KB
  Лабораторная работа №2 по дисциплине Организация производства и менеджмент: ПОТОЧНЫЕ МЕТОДЫ ОРГАНИЗАЦИИ ПРОИЗВОДСТВА Вариант №6 Расчет и построение стандартпланов работы однопредметных поточных линий. Задача 2.1. Определить длину сборочного конвейера ...
12720. Расчет основных календарно-плановых нормативов при оперативном планировании в серийном производстве 113.5 KB
  Лабораторная работа №3 по дисциплине Тема: Расчет основных календарноплановых нормативов при оперативном планировании в серийном производстве. Функциональная задача оперативного планирования в серийном производстве заключается в установлении основных календ...
12721. Экономическое обоснование выбора вариантов технологических процессов 132.5 KB
  Лабораторная работа №4 по дисциплине Организация производства и менеджмент: Экономическое обоснование выбора вариантов технологических процессов Вариант №6 ЗАДАЧА Произвести выбор наиболее экономического варианта операции механической обработки. Имеет
12722. Организация производства в машиностроении. Экономика и организация производства 183.5 KB
  Лабораторная работа №1 Организация производства в машиностроении и Экономика и организация производства Вариант №2 Задача 1.1 Построить графики технологического цикла сборки партии интегральных схем в количестве 4 штук при последовательном параллел...
12723. Циклы в VB .NET 12.43 KB
  Циклы 1.В VB .NET как практически во всех языках программирования существуют циклы конструкции позволяющие выполнять операции заданное количество раз или продолжать пока выполняется или наоборот не выполняется некоторое логическое условие. По сравнению с прежними
12724. Циклы с заданным числом повторений 54.5 KB
  Лабораторная работа № 16 Тема: Циклы с заданным числом повторений Общие сведения Циклом с заданным числом повторений называется процедура в которой вычислительные операции выполняются многократно заданное число раз. Циклы этого типа называются циклами типа €œДО€...
12725. Создание простой формы 900 KB
  Отчет Лабораторная работа №1 1 чаcть Тема: Создание простой формы Цель занятия: приобрести первоначальные навыки работы с формами. Рис.1.1 Текст программы Private Sub...
12726. Создание простой формы в VB .NET 664 KB
  Лабораторная работа № 1 Тема: Создание простой формы Цель занятия: приобрести первоначальные навыки работы с формами. Задание: Часть I: Создать форму для вычисления среднего балла успеваемости студента. Число предметов обучения четыре. На форме разместить пять...
12727. Знакомство с Visual Basic. Среда разработки проекта 123 KB
  Знакомство с Visual Basic. Среда разработки проекта. Общие сведения Рабочее окно рис. 1 представляет собой интегрированную среду разработки интерфейс языка программирования Visual Basic. Эта среда может настраиваться с помощью диалогового окна вызываемого командой Tools Op...