Студопедия — Ініціалізація масивів об'єктів
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Ініціалізація масивів об'єктів






Якщо клас містить параметризований конструктор, то масив об'єктів такого класу можна ініціалізувати. Наприклад, у наведеному нижче коді програми використовується клас demoClass і параметризований масив demoMas об'єктів цього класу, що ініціалізується конкретними значеннями.


#include < iostream> // Для потокового введення-виведення

#include < conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

 

class demoClass { // Оголошення класового типу

int a, b;

public:

demoClass(int n, int m) { a = n; b = m; }

int getAzm() { return a; }

int getBzm() { return b; }

};

 

int main ()

{

demoClass demoMas[4][2] = {

demoClass(1, 2), demoClass(3, 4),

demoClass(5, 6), demoClass(7, 8),

demoClass(9, 10), demoClass(11, 12),

demoClass(13, 14), demoClass(15, 16)

};

 

int i, j;

 

for (i=0; i< 4; i++)

for (j=0; j< 2; j++){

cout < < " demoMas[" < < i < < ", " < < j < < " ] ==> a= ";

cout < < demoMas[i][j].getAzm() < < "; b= ";

cout < < demoMas[i][j].getBzm() < < " \n";

}

 

cout< < " press any key! ";

while(! kbhit());

}

Доступ до структури можна отримати безпосередньо або через покажчик на цю структуру. Аналогічно можна звертатися і до об'єкта: безпосередньо (як в усіх попередніх прикладах) або за допомогою покажчика на об'єкт. Щоб отримати доступ до окремого члена об'єкта виключно " силами" самого об'єкта, використовують оператор " крапка". А якщо для цього слугує покажчик на цей об'єкт, необхідно використовувати оператор " стрілка" [1].

Щоб оголосити покажчик на об'єкт, використовується аналогічний синтаксис, як і у разі оголошення покажчиків на значення інших типів. У наведеному нижче коді програми створюється простий клас pClass, визначається об'єкт цього класу P_ob і оголошується покажчик на об'єкт типу pClass з іменем р. У наведеному прикладі показано, як можна безпосередньо отримати доступ до об'єкта P_ob і як використовувати для цього покажчик (у цьому випадку ми маємо справу з непрямим доступом).


#include < iostream> // Для потокового введення-виведення

#include < conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

 

class pClass { // Оголошення класового типу

int num;

public:

void setNum(int num) {num = num; }

void showNum() { cout < < " num= " < < num < < " \n"; }

};

int main ()

{

pClass P_ob, *p; // Створення об'єкта класу і покажчика на нього.

P_ob.setNum(1); // Отримуємо прямий доступ до об'єкта P_ob.

P_ob.showNum();

p = & P_ob; // Присвоюємо покажчику p адресу об'єкта P_ob.

p-> showNum(); // Отримуємо доступ до об'єкта P_ob за допомогою покажчика.

cout< < " press any key! ";

while(! kbhit());

}

Звернемо Вашу увагу на те, що адреса об'єкта P_ob отримується шляхом використання оператора посилання " & ", що цілком відповідає механізму отриманню адреси для змінних будь-якого іншого типу.

Інкрементація або декрементація покажчика відбувається так, щоб завжди вказувати на наступний або попередній елемент базового типу. Те саме відбувається і під час інкрементації або декрементації покажчика на об'єкт: він вказуватиме на наступний або попередній об'єкт. Щоби проілюструвати цей механізм, дещо модифікуємо попередню програму. Тепер замість одного об'єкта P_ob оголосимо двоелементний масив P_ob типу pClass. Звернемо Вашу увагу на те, як інкрементується та декрементується покажчик р для доступу до двох елементів цього масиву.

#include < iostream> // Для потокового введення-виведення

#include < conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

 

class pClass { // Оголошення класового типу

int num;

public:

void setNum(int num) {num = num; }

void showNum(){ cout < < " num= " < < num < < " \n"; }

};

 

int main ()

{

pClass P_ob[2], *p;

P_ob[0].setNum(10); // Прямий доступ до об'єктів

P_ob[1].setNum(20);

p = & P_ob[0]; // Отримуємо покажчик на перший елемент.

p-> showNum(); // Відображаємо значення елемента P_ob[0] за допомогою покажчика.

p++; // Переходимо до наступного об'єкта.

p-> showNum(); // Відображаємо значення елемента P_ob[1]// за допомогою покажчика.

p--; // Повертаємося до попереднього об'єкта.

p-> showNum(); // Знову відображаємо значення елемента P_ob[0].

cout< < " press any key! ";

while(! kbhit());

}2.4. Зразок виконання роботи







Дата добавления: 2014-11-10; просмотров: 1425. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

ПУНКЦИЯ И КАТЕТЕРИЗАЦИЯ ПОДКЛЮЧИЧНОЙ ВЕНЫ   Пункцию и катетеризацию подключичной вены обычно производит хирург или анестезиолог, иногда — специально обученный терапевт...

Ситуация 26. ПРОВЕРЕНО МИНЗДРАВОМ   Станислав Свердлов закончил российско-американский факультет менеджмента Томского государственного университета...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия