|
Программирование >> Расширенная версия языка c++
Упразкненин 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() следующие две инструкции равнозначны:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |