Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.04.2013
Размер:
47.1 Кб
Скачать

Доступ: закрытый и открытый

Понятие структуры расширено в С ++, так что появилась возможность вводить закрытые и открытые члены данных функции-члены. Внутри структуры использование ключевого слова privateс последующим двоеточием ограничивает доступ к членам, которые идут за этой конструкцией. Закрытые члены могут использоваться лишь некоторыми категориями функций. Таковыми являются функции-члены структур.

Изменим наш пример ch_stack, чтобы скрыть представление данных:

struct ch_stack {

public:

void reset ( ) {top = EMPTY; }

void push (char c) {top ++; s [top] = c; }

char pop ( ) { return s [top]; }

char top_of ( ) { return s [top]; }

bool empty ( ) { return (top = = EMPTY); }

bool full ( ) { return (top = = FULL); }

private:

enum {max_len= 100, EMPTY = -1, FULL = max_len -1};

char s [max_len];

inttop;

};

Теперь перепишем функцию main( ) из раздела 4.3, «Пример: стек» на стр. 112, чтобы проверить наши операции:

В файле ch_stac3.cpp

//обращение строки с использованием ch_stack

int main ( )

{

ch_stack s;

charstr [40] = {“Меня зовут Дон Кнут!”};

int i = 0;

cout << str <<endl;

s.reset( ); //s.top=EMPTYбыло бы ошибкой

while (str [i] && !s. full ( ))

s. push (str [i++] );

while(!s.empty( ) ) //печать обращенной строки

cout << s. pop ( );

cout << endl;

}

Результат работы этой версии тестовой программы будет выглядеть так:

Меня зовут Дон Кнут!

! тунк ноД тувоз янеМ

Как указано в комментарии, доступ к скрытой переменной topограничен. Она может быть изменена с помощью функции-членаreset( ) , но кtopнельзя обратиться напрямую. Отметьте также, как переменнаяsпередается каждой функции-члену с использованием оператора выбора члены структуры.

Структура ch_stackимеет закрытую часть, содержащую описания данных, и открытую часть, содержащую функции-члены, необходимые для осуществления операций вch_stack..

Классы

В С++ классы вводятся ключевым словом class. Они являются формой структуры, права доступа к членам которой по умолчанию определены как закрытые (private). Таким образом,structиclassвзаимозаменяемы, но необходимо определять надлежащие права доступа.

Давайте перепишем пример с комплексными числами:

struct complex {

public:

void assign (double r, double i);

void print ( )

{ cout << real << “+” << imag << “i”;}

private:

double real, imag;

};

inline void complex : : assign (double r, double I = 0.0)

{

real = r;

imag = i;

}

А вот эквивалентное представление класса:

class complex {

public: //стиль «должен знать»,

void assign (double r, double i); //см. ниже

void print ( )

{ cout << real << “+” << imag << “i”;}

private:

double real, imag;

};

inline void complex : : assign (double r, double i = 0.0)

{

real = r;

imag = i;

}

Также возможно было бы:

classcomplex{ //старый стиль, подразумевающий

double real, imag; //закрытый доступ

public:

void assign (double r, double i);

void print ( )

{ cout << real << “+” << imag << “i”;}

};

Здесь используется тот факт, что по умолчанию доступ к членам класса является закрытым.

Соседние файлы в папке Тельминов (мб)