русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Инициализация массивов объектов


Дата добавления: 2013-12-23; просмотров: 1076; Нарушение авторских прав


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

Можно создавать массивы объектов точно так же, как создаются массивы данных других типов. Например, следующая программа создает класс display, содержащий информацию о различных адаптерах дисплеев, которые могут быть подключены к ПК. В частности, он содержит число цве­тов, которые могут быть получены, и тип видеоадаптера. В функции main() создается массив из трех объектов display. Доступ к элементам этого массива осуществляется с помощью обычной процедуры с использованием индексов.

#include <iostream.h>

enum disp_type {mono, cga, ega, vga};

class display

{

int colors; // число цветов

enum disp_type dt; // тип дисплея

public:

void set_colors(int num) { colors = num; }

int get_colors() { return colors; }

void set_type(enum disp_type t) { dt = t; }

enum disp_type get_type() { return dt; }

};

char names[4][5] = {"mono", "cga", "ega", "vga"};

int main()

{

display monitors[3];

int i;

monitors[0].set_type(mono); monitors[0].set_colors(1);

monitors[1].set_type(cga); monitors[1].set_colors(4);

monitors[2].set_type(ega); monitors[2].set_colors(16);

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

{

cout << names[monitors[i].get_type()] << “ “;

cout << "has " << monitors[i].get_colors();

cout << " colors" << "\n";

}

return 0;

}

Эта программа выводит на экран следующий текст:

mono has 1 colors

cga has 4 colors

ega has 16 colors

Хотя это и не относится специально к массивам объектов, обратим внимание, каким образом двумерный символьный массив names использован для преобразования перечисляемых значений к их строковым эквивалентам. Для всех переменных перечисляемого типа, не содержащих явной инициализации, первая константа имеет значение 0, вторая 1 и т. д. Поэтому возвращаемое фун­кцией get_type() значение может быть использовано для индексации массива names, что позволя­ет вывести подходящее имя.



Многомерные массивы объектов индексируются в точности так же, как и массивы любых дру­гих типов данных.

Если класс определяет конструктор с параметрами, то можно инициализировать каждый объект массива путем указания списка инициализации в точности так, как это делается для массивов других типов. Однако точная форма списка инициализации будет определяться числом парамет­ров конструктора. Для объектов, чьи конструкторы имеют только один параметр, можно просто указать список начальных значений, используя обычный синтаксис инициализации массивов. Каждое значение в списке по порядку передается конструктору элемента в массиве при его создании. Например, ниже приведена программа, инициализирующая массив:

#include <iostream.h>

class C

{

int i;

public:

C(int j) { i=j; } // конструктор

int get_i() { return i; }

};

int main()

{

C ob[3] = {1, 2, 3}; // инициализаторы

for(int i=0; i<5; i++)

cout << ob[i].get_i() << "\n";

return 0;

}

Эта программа выводит на экран числа 1, 2 и 3.

Если конструктор объекта требует два или большее число аргументов, тогда необходимо ис­пользовать слегка измененную форму инициализации, приведенную ниже:

#include <iostream.h>

class pair

{

int h;

int i;

public:

pair(int j, int k) { h=j; i=k; } // конструктор

int get_i() { return i; }

int get_h() { return h; }

};

int main()

{

pair p[3] = { pair(1,2), pair(3,4), pair(5,6) }; // инициализаторы

for(int i=0; i<3; i++)

{

cout << p[i].get_h() << " ";

cout << p[i].get_i() << "\n";

}

return 0;

}

В этом примере конструктор класса C имеет два параметра и поэтому требует два аргумента. В результате инициализация в укороченной форме записи не может использоваться. Вместо этого применяется инициализация в длинной форме, как показано в примере. Разумеется, можно ис­пользовать эту длинную форму инициализации во всех случаях.



<== предыдущая лекция | следующая лекция ==>
Конструктор копирования | Указатели на объекты


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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