"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора(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; - стр 33 - Считая, что my_out был соответствующим образом проинициализирован (как, объясняется в #1.10), его можно использовать например так: 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* |
|
|