Программирование >>  Расширенная версия языка c++ 

1 ... 33 34 35 [ 36 ] 37 38 39 ... 227


Упразкненин

1. Перепишите пример 1 так, чтобы на экран выводилось содержимое массива ob в обратном порядке.

2. Измените пример 3 раздела 4.1 так, чтобы получить доступ к двумерному массиву через указатель. Подсказка: в С++, как и в С, все массивы хранятся непрерывно, слева направо, от младшего элемента к старшему.

4.3. Указатель this

C++ содержит специальный указатель this. Это указатель, который автоматически передается любой функции-члену при ее вызове и указывает на объект, генерирующий вызов. Например, рассмотрим следующую инструкцию:

ob.fl о ; едполож, что ob - это объект

sampO, 4) , : /

samp (5, 6), > J

затр(7, 8) .-

int i; --:t>--

samp *p;

p = ob; получение адреса начала массива

for(i=0; i<4; {

cout p->get a () ; cout p->get bO \n ;

Р++; переход к слеющему объекту -..ц

cout \п ;

return 0;

Эта программа выводит на экран следующее:

1 2 , ;.

5 . .. . .

Как видно из результата, при каждом инкрементировании указателя р он указывает на следующий объект массива.



1. Как вы уже видели, если функция-член работает с другим членом того же класса, она делает это без уточнения имени класса или объекта. Например, исследуйте эту короткую программу, в которой создается простой класс inventory:

Демонстрация указателя this ttinclude <iostream> #include <cstring> using namespace std;

class inventory {

char itein[20] ; .

double cost;

int on hand; public:

inventory(char *i, double c, int o)

strcpy{item, i);

cost

on hand = o;

void ShowO ;

void inventory: : ShowO ::

cout -:< item;

cout : $ cost;

cout On hand: onhand \n ;

int main ()

inventory ob( wrench , 4.95, 4); ob.show();

return 0; f f .

Функции П О автоматически передается указатель на объект ob. Этот указатель и называется this.

Важно понимать, что указатель this передается только функциям-членам. Дружественным функциям указатель this не передается.



116 Самоучитель <+

Обратите внимание, что внутри конструктора iaventory() и функции-члена showQ переменные-члены item, cost и on hand упоминаются явно. Так происходит потому, что функция-член может вызываться только в связи с объектом. Следовательно, в данном случае компилятор знает , данные какого объекта имеются в виду.

Однако имеется еще более тонкое объяснение. Если вызывается функция-член, ей автоматически передается указатель this на объект, который является источником вызова. Таки щзол1, предыдущую программу можно переписать так:

Демонстрации ателя this tinclude <iostream> . .

tinclude <cstring> . ,

using namespace std;

class inventory {

char item[20] ;

double cost;

int on hand; public:

inventory (char *i, double c, int o)

{ .

strcpy(this->item, i) ; доступ к члену , . this->cost = с; через

this->on hand = о; указатель this .

void ShowO ;

voi y: : show ()

cou ->item; зовамие this для доступа к членам cout : $ thi3->cost;

cout On hand: this->on hand \n ;

int mainO

inventory ob( wrench , 4.95, 4); ob.show() ; return 0;

Здесь к переменным-членам объекта ob осуществляется прямой доступ через указатель this. Таким образом, внутри функции w() следующие две инструкции равнозначны:



1 ... 33 34 35 [ 36 ] 37 38 39 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика