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.
А также другие работы, которые могут Вас заинтересовать | |||
66017. | Антикризисная программа Китая | 34 KB | |
Учитывая что промышленность этой страны в большей части ориентирована на экспорт а мировой и в первую очередь американский спрос с учетом кризиса существенно снизился китайское правительство в своих планах по поддержке экономики сделало ставку... | |||
66018. | Бюджетные системы зарубежных стран | 31 KB | |
Принцип обязательного облечения бюджета в форму акта, принимаемого представительным органом власти, означает требование законодательного оформления бюджета. В большинстве стран бюджет принимается в виде закона | |||
66019. | Особые экономические зоны. Свободные экономические зоны РФ, оффшоры | 57 KB | |
Развитием особых экономических зон в России занимается специально созданная управляющая компания Особые экономические зоны единственным акционером которого является государство. На территории ОЭЗ действует особый режим осуществления предпринимательской деятельности... | |||
66023. | Управление финансами | 106.38 KB | |
Управление финансами это деятельность по обеспечению развития финансовой системы государства или конкретного субъекта хозяйствования в соответствии с заданными количественными и качественными параметрами. Управление финансами является составной частью общей системы управления социально-экономическими процессами. | |||
66024. | Федеральное казначейство и его функции | 18.77 KB | |
В России переход к казначейскому исполнению бюджета начался в 1992 г. исполнение бюджета в нашей стране было банковским. Чем отличаются эти две формы исполнения бюджета При банковском исполнении бюджета средства налогоплательщиков поступали на счета налоговых органов в Банке России или в коммерческих банках. | |||
66025. | Пенсионная реформа РФ | 24.71 KB | |
О дополнительных страховых взносах на накопительную часть трудовой пенсии и государственной поддержке формирования пенсионных накоплений начало приема заявлений о вступлении в отношения по ДСВ. 2009 С 1 января 2009 года действует новая система добровольных... | |||