Среда, 08.01.2025, 20:48
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » 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();

}
Категория: c++ | Добавил: slava (30.05.2011)
Просмотров: 3379 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]