{
return i;
}
void put_i(int j)
{
i = j;
}
};
В общем случае небольшие функции (как представленные в этом примере) определяются в объявлении класса. Это соглашение применяется и к остальным примерам данной книги.
Важно! Определение небольших функций-членов в объявлении класса — обычная практика в С++-программировании. И дело даже не в средстве автоматического встраивания, а просто в удобстве. Вряд ли вы встретите в профессиональных программах, чтобы короткие функции-члены определялись вне их класса.
Массивы объектов можно создавать точно так же, как создаются массивы значений других типов. Например, в следующей программе создается класс display, который содержит значения разрешения для различных режимов видеомонитора. В функции main() создается массив для хранения трех объектов типа display, а доступ к объектам, которые являются элементами этого массива, осуществляется с помощью обычной процедуры индексирования массива.
// Пример использования массива объектов.
#include <iostream>
using namespace std;
enum resolution {low, medium, high}
class display {
int width;
int height;
resolution res;
public:
void set_dim(int w, int h) {width=w; height=h;}
void get_dim(int &w, int &h) {w=width; h=height;}
void set_res(resolution r) {res = r;}
resolution get_res() {return res;}
};
char names[3][8] = {
"низкий",
"средний",
"высокий",
};
int main()
{
display display_mode[3];
int i, w, h;
display_mode[0].set_res(low);
display_mode[0].set_dim(640, 480);
display_mode[1].set_res(medium);
display_mode[1].set_dim(800, 600);
display_mode[2].set_res(high);
display_mode[2].set_dim(1600, 1200);
cout << "Возможные режимы отображения данных:\n\n";
for(i=0; i<3; i++) {
cout << names[display_mode[i].get_res()] << ":";
display_mode[i].get_dim(w, h);
cout << w << " x " << h << "\n";
}
return 0;
}
При выполнении эта программа генерирует такие результаты.
Возможные режимы отображения данных:
низкий: 640 х 480
средний: 800 х 600
высокий: 1600 х 1200
Обратите внимание на использование двумерного символьного массива names для преобразования перечислимого значения в эквивалентную символьную строку. Во всех перечислениях, которые не содержат явно заданной инициализации, первая константа имеет значение 0, вторая — значение 1 и т.д. Следовательно, значение, возвращаемое функцией get_res(), можно использовать для индексации массива names, что позволяет вывести на экран соответствующее название режима отображения.
Многомерные массивы объектов индексируются точно так же, как многомерные массивы значений других типов.
Если класс включает параметризованный конструктор, то массив объектов такого класса можно инициализировать. Например, в следующей программе используется параметризованный класс samp и инициализируемый массив sampArray объектов этого класса.
// Инициализация массива объектов.
#include <iostream>
using namespace std;
class samp {
int a;
public:
samp(int n) { a = n; }
int get_a() { return a; }
};
int main()
{
samp sampArray[4] = { -1, -2, -3, -4 };