Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Указатель на объект




Массивы объектов

Объекты – это переменные, и они имеют те же возможности и свойства, что и переменные любых других типов. Поэтому вполне допустимо создавать массивы объектов. Синтаксис объявления массива объектов и доступ к его элементам совершенно аналогичны обычным массивам.

// Пример 12.7. Создание и использование одномерного массива объектов.

#include <iostream >

using namespace std;

class Samp{

int x;

public:

voidsetx(int n){x = n;}

int getx(){return x;}

};

int main(){

Samp ob[4]; // массив объектов из 4-х элементов

for(int i = 0; i < 4; i++) // присваивание элементам массива

ob[i].setx(i); // значений от 0 до 3

for(int i = 0; i < 4; i++) // чтение элементов массива

cout<< ob[i].getx()<<' '; // и вывод их на экран – 0 1 2 3

system("pause");

}

В этом примере следует обратить внимание, как вызываются функции для каждого элемента массива. Имя массива объектов, в данном случае ob, индексируется; затем для доступа к элементу массива объектов применяется операция точка (.), за которой следует имя вызываемой функции (в нашем примере это функции setx() и getx()).

Аналогично создаётся` и используется двумерный массив объектов:

Samp ob[2][4]; // двумерный массив объектов

// из 2 строк и 4 столбцов

int k = 1;

 

for(int i = 0; i < 2; i++) // присваивание элементам массива

for(int j = 0; j < 4; j++){ // объектов значений от 1 до 8

ob[i][j].setx(k); k++;

cout<< ob[i][j].getx()<<' '; // вывод элементов массива объектов

}

Если класс включает конструктор с параметрами, то массив объектов такого класса можно инициализировать явно.

// Пример 12.8. Явная инициализация одномерного массива объектов.

#include <iostream >

using namespace std;

class Samp{

int x;

public:

Samp(int n){x = n;}

int getx(){return x;}

};

int main(){

Samp ob[4] = { 1, 2, 3, 4 }; // создание массива объектов ob,

// вызов конструктора 4 раза

for(int i = 0; i < 4; i++) // вывод элементов массива ob

cout<< ob[i].getx()<<' '; // 1 2 3 4

system("pause");

}

Указатель на объект – это переменная, которая хранит адрес объекта в памяти компьютера. Для объявления указателя на объект используется тот же синтаксис, как и в случае объявления указателя на переменную любого типа – следует добавить звёздочку после идентификатора типа объекта, непосредственно или через пробел:

Samp * p; // объявление указателя на тип Samp

При объявлении более чем одного указателя звёздочка ставится перед каждым из них.

Как и другие переменные, помимо объявления, указатели требуют инициализации, так как в противном случае они содержат непредсказуемые значения. При инициализации указателям присваивается значение нуль(NULL) или конкретный адрес. Адрес указателю можно присвоить с помощью операции адреса (&). Разыменование указателя выполняется с помощью операции разыменования (*).

Доступ к отдельному public -элементу объекта можно получить напрямую, используя операцию точка (.), или через указатель на этот объект – в этом случае необходимо использовать операциюстрелка (–>).

// Пример 13.1. Объявление и использование указателя на объект класса.

#include <iostream>

using namespace std;

class Samp {

int x;

public:

int y;

void setx(int n){x = n;}

void show();

};

void Samp::show(){

cout<<" x = "<<x<<" y = "<<y<<endl;

}

int main() {

Samp ob, *p; // создание объекта ob и указателя p

ob.setx(1); // прямой доступ к членам объекта ob

ob.y = 1; ob.show(); // x = 1 y = 1

p = &ob; // присваивание p адреса объекта ob

p->setx(5); // вызов функции через указатель p

p->y = 5; p->show(); // x = 5 y = 5

(*p).y = 55; p->show(); // x = 5 y = 55

}

В данном примере выражение (*p) разыменовывает указатель, разрешая доступ к содержимому ячейки памяти по адресу, хранящемуся в p.




Поделиться с друзьями:


Дата добавления: 2015-06-25; Просмотров: 326; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.