| 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();
} | |
| Просмотров: 3407 | Рейтинг: 5.0/1 |
| Всего комментариев: 0 | |