Еще о классах в С++

Класс — это механизм для создания объектов. Класс объявляется с помощью ключевого слова class. Синтаксис объявления класса похож на синтаксис объявления структуры. Здесь показана основная форма:
class myclass {
// закрытый элемент класса
int a;
public;
void set_a(int num)
int get_a ( ) ;
};
Этот класс имеет одну закрытую переменную а, и две открытые функции: set_a() и get_a(). Прототипы функций объявляются внутри класса. Функции, которые объявляются внутри класса, называются функциями-членами (member functions). Поскольку а является закрытой переменной класса, она недоступна для любой функции вне myclass. Однако поскольку set_a() и get_a() являются членами myclass, они имеют доступ к а. Более того, set_a() и get__a(), являясь открытыми членами myclass, могут вызываться из любой части программы, использующей myclass. Хотя функции set_a() и get_a() и объявлены в myclass, они еще не определены. Для определения функции-члена вы должны связать имя класса, частью которого является функция-член, с именем функции. Это достигается путем написания имени функции вслед за именем класса с двумя двоеточиями. Два двоеточия называются оператором расширения области видимости (scope resolution operator).

Далее показан способ определения функций-членов set_a() и get_a():
void myclass :: set_a (int num)
{
a=num;
}
int myclass :: get_a (}
{
return a;
}
Пример. Создается класс stack, реализующий стек, который можно использовать для хранения символов:
#include 
using namespace std;
#define SIZE 10
// Объявление класса stack для символов
class stack {
 char stck[SIZE]; // содержит стек
 int tos; // индекс вершины стека
public:
 stack(); // конструктор
 void push(char ch); // помещает в стек символ
 char pop(); // выталкивает из стека символ
};
// Инициализация стека
stack::stack()
{
 cout << "Работа конструктора стека \n";
 tos=0;
}
// Помещение символа в стек
void stack::push(char ch)
{
 if (tos==SIZE) {
 cout << "Стек полон";
 return;
 }
 stck[tos]=ch;
 tos++;
}
// Выталкивание символа из стека
char stack::pop()
{
 if (tos==0) {
 cout << "Стек пуст";
 return 0; // возврат нуля при пустом стеке
 }
 tos--;
 return stck[tos];
}
int main()
{
 // образование двух, автоматически инициализируемых, стеков
 stack s1, s2; 
 int i;
 s1.push('a');
 s2.push('x');
 s1.push('b');
 s2.push('y');
 s1.push('c');
 s2.push('z');
 for(i=0; i<3; i++) cout << "символ из s1:" << s1.pop() << "\n";
 for(i=0; i<3; i++) cout << "символ из s2:" << s2.pop() << "\n";
 return 0;
}
Программа выводит на экран следующее:
символ из s1: с
символ из s1: b
символ из s1: a 
символ из s2: z
символ из s2: y
символ из s2: х
Проанализируем программу. Класс stack содержит две закрытые переменные: stck и tos. Массив stck содержит символы, фактически помещаемые в стек, a tos содержит индекс вершины стека. Открытыми функциями стека являются init(), push() и рор(), которые, соответственно, инициализируют стек, помещают символ в стек и выталкивают его из стека.

Внутри функции main() создаются два стека, s1 и s2, и по три символа помещаются в каждый из них. Важно понимать, что один объект (стек) не зависит от другого. Поэтому у символов в s1 нет способа влиять на символы в s2. Каждый объект содержит свою собственную копию stck и tos. Это фундаментальная для понимания объектов концепция. Хотя все объекты класса имеют общие функции-члены, каждый объект создает и поддерживает свои собственные данные.
Онлайн всего: 4
Гостей: 4
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте