Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / C / C++ / Введение в язык C++ / Турне по C++ /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Классы - Программирование от RIN.RU
Классы

Давайте посмотрим, как мы могли бы определить тип потока вывода ostream. Чтобы упростить задачу, предположим, что для буферизации определен тип streambuf. Тип streambuf на самом деле определен в , где также находится и настоящее определение ostream. Пожалуйста, не испытывайте примеры, определяющие ostream в этом и последующих разделах; пока вы не сможете полностью избежать использования , компилятор будет возражать против переопределений.


Определение типа, определяемого пользователем (который в C++ называется class, т.е. класс), специфицирует данные, необходимые для представления объекта этого типа, и множество операций для работы с этими объектами. Определение имеет две части: закрытую (private) часть, содержащую информацию, которой может пользоваться только его разработчик, и открытую (public) часть, представляющую интерфейс типа с пользователем:


class ostream {
streambuf* buf;
int state;
public:
void put(char*);
void put(long);
void put(double);
}


Описания после метки public задают интерфейс: пользователь может обращаться только к трем функциям put(). Описания перед меткой public задают представление объекта класса ostream; имена buf и state могут использоваться только функциями put(), описанными в открытой части.


class определяет тип, а не объект данных, поэтому чтобы использовать ostream, мы должны один такой объект описать (так же, как мы описываем переменные типа int):


ostream my_out;


Считая, что my_out был соответствующим образом проинициализирован (как, объясняется в этом пункте), его можно использовать например так:


my_out.put("Hello, world\n");


С помощью операции точка выбирается член класса для данного объекта этого класса. Здесь для объекта my_out вызывается член функция put().


Функция может определяться так:


void ostream::put(char* p)
{
while (*p) buf.sputc(*p++);
}


где sputc() - функция, которая помещает символ в streambuf. Префикс ostream необходим, чтобы отличить put() ostream"а от других функций с именем put().


Для обращения к функции члену должен быть указан объект класса. В функции члене можно ссылаться на этот объект неявно, как это делалось выше в ostream::put(): в каждом вызове buf относится к члену buf объекта, для которого функция вызвана.


Можно также ссылаться на этот объект явно посредством указателя с именем this. В функции члене класса X this неявно описан как X* (указатель на X) и инициализирован указателем на тот объект, для которого эта функция вызвана. Определение ostream::put() можно также записать в виде:


void ostream::put(char* p)
{
while (*p) this->buf.sputc(*p++);
}


Операция -> применяется для выбора члена объекта, заданного указателем.



 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Комментарии

Типы и Описания

Выражения и Операторы

Функции

Структура программы

Перегрузка операций

Вектора

Inline-подстановка

Производные классы

Еще об операциях

Друзья (friends)

Обобщенные Вектора

Полиморфные Вектора

Виртуальные функции

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь