Читаем Интернет-журнал "Домашняя лаборатория", 2007 №10 полностью

   int top;

};

Теперь создадим функцию reset, задача которой инициализация. В ней нам достаточно переменной top присвоить значение -1. В качестве параметра ей будет передаваться указатель на структуру (при использовании указателя для доступа к членам структуры используется не"." а оператор "->").

void reset(stack* st)

{

   st->top = -1;

}

Так же нам нужны функции push (вставить) и pop (извлечь).

void push(stack* st, char s)

{

   ++st->top;

   st->s[st->top] = s;

}


char pop(stack* st)

{

   --st->top;

   return st->s[st->top];

}

Теперь напишем функцию main, чтобы проверить нашу версию стека, функция будет печатать строку в обратном порядке.

main()

{

   char str[] = "Му name is Gena";

   int count = sizeof(str);

   stack My_stack;

   reset(&My_stack);

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

   {

      push(&My_stack, str[i]);

   }

   while(My_stack.top!= -1)

   {

       cout << pop(&My_stack);

   }

   cout << end1;

}

Полностью текст программы должен выглядеть так:

#include


struct stack

{

   char s [1000];

   int top;

};


void reset(stack* st)

{

   st->top = -1;

}


void push(stack* st, char s)

{

   ++st->top;

   st->s[st->top] = s;

}


char pop(stack* st)

{

   --st->top;

   return st->s[st->top];

}


main()

{

   char str[] = "My name is Gena";

   int count = sizeof(str);

   stack My_stack;

   reset(&My_stack);

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

   {

       push(&My_stack, str[i]);

   }

       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)

{

     floor = num;

}


void kwart::SetArea(int num)

{

     area = num;


void kwart::SetPrice(int num)

{

      price = num;

}


void kwart::SetStatus(bool stat)

{

      status = stat;

}

Теперь если мы напишем:

kwart kw;

int i = kw.area;

Перейти на страницу:

Похожие книги

Домашний мастер
Домашний мастер

Хотите, чтобы ваш дом всегда был в порядке? Чтобы паркет не вздыбливался, обои не отклеивались, а двери и оконные рамы не перекашивались? В общем-то для этого нужно не так уж много – просто следить за состоянием своего жилища, а при необходимости его ремонтировать. В этом вам поможет наша книга «Домашний мастер». Никто не утверждает, что с ее помощью вы сможете стать высококлассным специалистом, однако правильно ухаживать за своим домом вы научитесь точно. Вам будут подвластны все виды штукатурных, столярных, малярных и прочих работ, вы сможете постелить линолеум, уложить паркет, сделать подоконники, выровнять стены, наклеить на них обои (между прочим, это не так просто, как может показаться!). Словом, отремонтировать свой дом самостоятельно, не привлекая специалистов – да, очень хороших, но (посмотрим правде в глаза!) таких дорогостоящих… А если еще и проверить названную ими сумму… Так что приобретайте эту книгу, необходимые стройматериалы и инструменты и – вперед. Ваш дом будет как новенький, а вы гордо сможете сказать: «Я это сделал сам!»

Владимир Онищенко

Сделай сам / Хобби и ремесла / Дом и досуг