HTML [44] |
Visual C++ и MFC [21] |
c++ [78] |
php [19] |
Javascript [15] |
C# [51] |
загрузки [0] |
XNA
[10]
создание игр с помощью xna
|
Главная » Статьи » c++ |
Темой нашего занятия будут опять указатели. Теперь это будут указатели на объекты. В С++ всё построено на указателях и с этим надо смириться. У меня для вас есть отличная новость: " Ваше знание указателей поможет вам в освоении нижеизложенного материала ". Итак стартуем !!! Как вы уже знаете в С++ для доступа к членам обьекта через сам обьект используется оператор " точка " ( . ) Пример#include<iostream.h > class Digit{ public: int a; }; void main(){ Digit z; //доступ к переменной класса Digit через точку z .a=3; } Здесь всё стандартно вы к этому уже должны были привыкнуть. Привыкли ? Тогда продолжаем ! Новая информацияУказатель может указывать не только на встроенный тип ( например на int или float ) , но и на тип определенный пользователем.Тип определенный пользователем - например структура , класс. В этом случае для доступа к членам через указатель необходимо использовать оператор стрелка ( -> ).Не ищите его на клавиатуре его там нет !Это комбинация - и > на клавиатуре. Пример// В этом примере показывается работа через оператор -> // Есть класс Example в нем 1 переменная и 2 функции #include<iostream.h > class Example{ public: int num; //Функция для установки значения void Set(int val){ num=val; } //Функция для показа значения void Show(); }; void Example::Show(){ cout<<num; } void main(){ // Итак создаются обьект класса Example и указатель на этот класс Example ex,*ptr; // Непосредственная работа через обьект класса ex.Set(1); ex.Show(); // Присвоение адреса ptr адреса ex ptr=&ex; // Доступ с помощью Указателя ptr->Show(); } ВажноЗдесь ключевой момент состоит в том что адрес объекта получен с использованием оператора взятия адреса & ,точно так же , как берется адрес переменной любого типа. Итак запомните если вы работаете с обьектом класса необходимо использовать оператор " точка " ( . ) ,если же работа происходит через указатель на класс то " стрелка " ( -> ) единственно правильный выбор !!! Инкремент ( ++ ) или декремент ( -- ) указателя изменяют его таким образом, что он всегда указывает на следующий элемент базового типа. Тоже самое и справедливо и для указателей на класс. ПримерИтак предположим у нас стоит задача написать класс Точка и поработать с ним через указатель #include<iostream.h> class Point{ public: // координаты точки int x,y; // функция для установки значений координат точки void Set(int x1,int y1){ x=x1; y=y1; } // функция для показа координат точки void Show(){ cout<<"X is "<<x<<" Y is"<<y<<endl; } }; void main(){ // Создаем массив объектов класса Точка и указатель на этот класс Point astr[2],*ptr; // Задаем конкретные значения для элементов массива astr astr[0].Set(2,3); astr[1].Set(10,10); // Присваиваем адрес первого элемента ( у него индекс 0 ) массива обьектов //Point под названием astr указателю ptr ,имеющему также базовый тип // Point.После этого можно с помощью ptr обращаться к элементам // массива ptr=astr;// После этого в ptr адрес элемента массива astr с индексом 0 ptr->Show(); // Каждый раз когда происходит инкремент адрес находящийся // в ptr увеличивается на размер базового типа ptr++;// После этого в ptr адрес элемента массива astr с индексом 1 ptr->Show(); ptr--;//После этого в ptr адрес элемента массива astr с индексом 0 ptr->Show(); } | |
Просмотров: 3379 | Рейтинг: 5.0/1 |
Всего комментариев: 0 | |