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

Массивы как члены классов. Массивы объектов. Строки как члены классов. Массивы строк

Читайте также:
  1. III. ЧЛЕНЫ ВСЕРОССИЙСКОГО ОБЩЕСТВА ИНВАЛИДОВ
  2. Воздействия на горные породы и их массивы
  3. Восстановление удаленных объектов.
  4. Второстепенные члены предложения
  5. Гастрокинетики
  6. Двумерные массивы
  7. ДВУМЕРНЫЕ МАССИВЫ
  8. Демаскирующие признаки объектов.
  9. Депутаты Государственной Думы Федерального Собрания и члены Совета Федерации
  10. Диагностирование в жизненном цикле технических объектов.
  11. Динамические массивы
  12. Дисковые массивы RAID

Массивы как члены классов

Массивы могут быть использованы в качестве полей класса. В нашем примере, программе, создадим простой класс stack.

#include <iostream>

using namespace std;

class Stack

{

private:

enum { MAX = 10 }; // немного нестандартный синтаксис

int st [ MAX ]; // стек в виде массива

int top; // вершина стека

public:

Stack () // конструктор

{ top = 0; }

void push (int var) // поместить в стек

{ st [ ++top ] = var; }

int pop () // взять из стека

{ return st [ top-- ]; }

};

int main ()

{

Stack s1;

s1.push (11);

s1.push (22);

cout << "1: " << s1.pop () << endl;

cout << "2: " << s1.pop () << endl;

s1.push (33);

s1.push (44);

s1.push (55);

s1.push (66);

cout << "3: " << s1.pop () << endl;

cout << "4: " << s1.pop () << endl;

cout << "5: " << s1.pop () << endl;

cout << "6: " << s1.pop () << endl;

return 0;

}

Важным членом класса stack является массив st. Переменная top типа int хранит в себе индекс последнего элемента, положенного в стек; этот элемент располагается на вершине стека.

Размер массива, используемого для стека, определяется переменной MAX в строке

enum { MAX = 10 }.

Это означает, что MAX — константа и применяется для всех объектов класса. К сожалению, некоторые компиляторы не позволяют использовать эту конструкцию. Используя обходной путь, мы можем определить такие константы через перечисление.

При добавлении в стек нового элемента индекс переменной top увеличивается, и она будет показывать на новую вершину стека. При удалении элемента из стека индекс переменной top уменьшается. (Нам не нужно стирать старое значение из памяти при удалении элемента, оно просто становится несущественным.)

Для помещения элемента в стек — процесс называемый проталкиванием — вы вызываете метод push() с сохраняемым значением в качестве аргумента. Для извлечения элемента из стека вы вызываете метод pop(), который возвращает значение элемента.

Программа main()применяет класс stack, создавая объект s1 этого класса. Программа помещает два элемента в стек, затем извлекает их и выводит на дисплей. Затем в стек помещаются еще четыре элемента, далее они извлекаются и выводятся (элементы извлекаются из стека в обратном порядке).

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

1.Массивы интервалов

#include <iostream>

using namespace std;

class Distance

{

private:

int feet;

float inches;

public:

void getdist () // получение информации

{

cout << "\n Введите футы: "; cin >> feet;

cout << " Введите дюймы: "; cin >> inches;

}

void showdist () const // показ информации

{ cout << feet << "\'-" << inches << '\"'; }

};

int main ()

{

Distance dist [ 100 ]; // массив переменных

int n = 0; // счетчик данных

char ans; // ответ пользователя (y/n)

cout << endl;

do

{

cout << "Введите длину номер " << n + 1;

dist [ n++ ].getdist (); // получаем и сохраняем длину

cout << "Продолжить ввод (y/n)?: ";

cin >> ans;

}

while (ans!= 'n'); // продолжать, пока не будет введено 'n' // показываем все введенное

for (int j = 0; j < n; j++)

{

cout << "\nДлина номер " << j + 1 << ": ";

dist [ j ].showdist ();

}

cout << endl;

return 0;

}

В этой программе пользователь может ввести произвольное количество интервалов. После введения каждого интервала программа спрашивает пользователя о том, нужно ли будет ввести еще один интервал. Если нет, то программа выводит все введенные ранее интервалы.

Как вы можете видеть, доступ к методу объекта, являющегося элементом массива, осуществляется с помощью операции точки.

2.Массивы карт

#include <ctime>

using namespace std;

enum Suit { clubs, diamonds, hearts, spades }; // от 2 до 10 обычные числа

const int jack = 11;

const int queen = 12;

const int king = 13;

const int ace = 14;

class card

{

private:

int number;

Suit suit;

public:

card () // конструктор

{ }

void set (int n, Suit s) // установка значения

{ suit = s; number = n; }

void display (); // показ карты

};

void card::display ()

{

if (number >= 2 && number <= 10)

cout << number;

else

{

switch (number)

{

case jack: cout << 'J'; break;

case queen: cout << 'Q'; break;

case king: cout << 'K'; break;

case ace: cout << 'A'; break;

}

}

switch (suit)

{

case clubs: cout << static_cast<char>(5); break;

case diamonds: cout << static_cast<char>(4); break;

case hearts: cout << static_cast<char>(3); break;

case spades: cout << static_cast<char>(6); break;

}

}

int main ()

{

card deck [ 52 ];

int j;

cout << endl;

for (j = 0; j < 52; j++) // создаем упорядоченную колоду карт

{

int num = (j % 13) + 2;

Suit su = Suit (j / 13);

deck [ j ].set (num, su);

} // показываем исходную колоду

cout << "Исходная колода:\n";

for (j = 0; j < 52; j++)

{

deck [ j ].display ();

cout << " ";

if (!((j + 1) % 13)) // начинаем новую строку после каждой 13-й карты

cout << endl;

}

srand (time (NULL)); // инициализируем генератор случайных чисел

for (j = 0; j < 52; j++)

{

int k = rand () % 52; // выбираем случайную карту

card temp = deck [ j ]; // и меняем ее с текущей

deck [ j ] = deck [ k ];

deck [ k ] = temp;

} // показываем перемешанную колоду

cout << "\nПеремешанная колода:\n";

for (j = 0; j < 52; j++)

{

deck [ j ].display ();

cout << " ";

if (!((j + 1) % 13)) // начинаем новую строку после каждой 13-й карты

cout << endl;

}

return 0;

}

Теперь, раз уж мы создали колоду карт, нам, наверное, стоит перемешать их. В программе мы показали карты, перемешали их и показали вновь. Для экономии пространства мы использовали графические символы мастей: трефы, черви, пики и бубны.

Графические символы

Здесь мы использовали несколько специальных графических символов из кодов ASCII (см. приложение А «Таблица ASCII», список кодов ASCII.) В методе display() класса card мы использовали коды 5, 4, 3 и 6 для получения символов треф, бубен, червей и пик соответственно. Преобразуя эти номера к типу char, как в следующей строке,

static_cast<char>(5)

мы сможем напечатать их в виде символов, а не номеров.

Колода карт

Массив обьектов, предназначенный для колоды карт, определен в строке

card deck [ 52 ];

Здесь создается массив, названный deck, содержащий 52 объекта типа card. Для вывода j карты колоды мы вызовем метод display(); deck [ j ].display ();

Массивы строк

#include <iostream>

using namespace std;

int main ()

{

const int DAYS = 7; // количество строк в массиве

const int MAX = 12; // максимальная длина каждой из них

// массив строк

char star [ DAYS ][ MAX ] =

{

"Понедельник", "Вторник", "Среда", "Четверг",

"Пятница", "Суббота", "Воскресенье"

};

// вывод всех строк на экран

for (int j = 0; j < DAYS; j++)

cout << star [ j ] << endl;

return 0;

}

Строки как члены классов

Строки часто используют в качестве членов классов. В следующем примере используются строки, содержащие названия частей изделий.

#include <iostream>

#include <cstring>

using namespace std;

class part {

private:

char partname [ 30 ]; // название

int partnumber; // номер

double cost; // цена

public:

void setpart (char pname [ ], int pn, double c)

{

strcpy (partname, pname);

partnumber = pn;

cost = c;

}

void showpart ()

{

cout << "\nНазвание=" << partname;

cout << ", номер=" << partnumber;

cout << ", цена=$" << cost;

}

};

int main ()

{

part part1, part2;

part1.setpart ("муфта", 4473, 217.55);

part2.setpart ("вороток", 9924, 419.25);

cout << "\nПервая деталь: "; part1.showpart ();

cout << "\nВторая деталь: "; part2.showpart ();

cout << endl;

return 0;

}

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.013 сек.)