Шрифт:
while(My_stack.top!= -1)
{
cout << pop(&My_stack);
}
cout << end1;
}
Пример 12
Структуры в C++ могут иметь в качестве своих членов(в предыдущем примере это s и top) не только переменные но и функции. Для этого объявление функций вставляется в объявление структуры, например предыдущий пример стека можно объявить так:
struct stack
{
char s [1000];
int top;
void reset
{
top = -1;
}
void push(char c)
{
++top;
s[top] = c;
}
char pop
{
– -top;
return s[top];
}
};
Функции-члены записаны так же как обычные функции. Отличие лишь в том что теперь они могут использовать переменные и функции "как есть", им не нужно передавать в качестве параметров такие переменные как s и top. Обращаются к функциям-членам так же как и к обычным членам: с помощью оператора".", а указатели с помощью оператора "->". Приведем несколько фрагментов кода:
stack My_stack;
My_stack.reset;
stаск * pMy_stack = &My_stack;
pMy_stack->push('A');
Переменные структур и классов (позже мы узнаем что это) принято называть — "объектами", с этой минуты и мы их будем так называть.
Пример 13
Функции-члены, которые определены внутри структуры, являются встраиваемыми. Обычно, только маленькие, часто используемые функции определяются внутри структуры (как в предыдущем уроке). Что бы определить функцию-член вне структуры используется оператор Давайте это наглядно покажем, переделав структуру из предыдущего урока.
struct stack
{
char s [1000];
int top;
void reset;
void push(char c);
char pop;
};
void stack::reset
{
top = -1;
}
void stack::push(char c)
{
++top;
s[top] = c;
}
char s tack::pop
{
– -top;
return s[top];
}
Запись void stack::reset говорит, что функция reset принадлежит структуре stack. Благодаря оператору"::" мы можем иметь одинаковые имена функций для разных типов структур.
Пример 14
В объектно-ориентированном программировании существует такое понятие как механизм сокрытия данных. Давайте возьмем случай когда вы покупаете магнитофон, то вам доступны только те его части которые необходимы для работы с ним (кнопочки, экранчики и т. д.), такие части как провода, магнитные головки и т. д. вам не доступны. В структурах и классах (позже мы узнаем что это такое) сокрытие данных осуществляется с помощью ключевых слов public (открытый), private (закрытый) и protected (защищенный). Закрытые члены в программе недоступны, а открытые наоборот доступны. Внутри структуры после ключевого слова private, все члены ограничены доступом. Закрытыми членами могут пользоваться только функции-члены этой структуры. Открытые члены могут использоваться и вне структуры.
Напишем структуру, характеризующую квартиру. В ней будут такие члены как number (номер квартиры), count_room (количество комнат), floor (этаж), area (площадь), price (цена), status (приватизирована или нет), эти члены мы сделаем закрытыми, а для доступа к ним напишем функции.
struct kwart
{
public:
int GetNumber;
int GetCountRoom ;
int GetFloor;
int GetArea;
int GetPrice;
bool GetStatus;
void SetNumber(int);
void SetCountRoom(int);
void SetFloor(int);
void SetArea(int);
void SetPrice(int);
void SetStatus(bool);
private:
int number;
int count_room;
int floor;
int area;
int price;
bool status;
};
int kwart::GetNumber
{
return number;
}
int kwart::GetCountRoom
{
return count_room;
}
int kwart::GetFloor
{
return floor; int kwart::GetArea
{
return area; int kwart::GetPrice
{
return price;
}
bool kwart::GetStatus
{
return status;
}
void kwart::SetNumber(int num)
{
number = num;
void kwart::SetCountRoom(int count)
}
count_room = count;
}
void kwart::SetFloor(int num)