Программирование >>  Расширенная версия языка c++ 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 227


В результате выполнения программы на экран выводится следующее:

10, 23

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

stream, который и является передаваемым в функцию потоком. Как вы увидите в следующей главе, та же самая пользовательская функция вывода, которая в нашем примере используется для вывода информации на экран, может использоваться и для ее вывода в любой поток. Тем не менее, начинающие программисты иногда пишут пользовательскую функцию вывода для класса coord следующим образом:

ostream coord ob)

cou< ob. ob.y Xn

stream;

В этом случае выражение жестко запрограммировано на вывод информации на стандартное устройство вывода, связанное с классом cout. Это ведет к тому, что другие потоки не могут воспользоваться вашей функцией. Вывод очевиден, следует делать свои возможно, более обобщенными, по-

скольку это никогда не повредит, а иногда может оказаться полезным.

2. В следующей версии предыдущей программы, пользовательская функция вывода не является дружественной классу coord. Поскольку у пользовательской функции вывода нет доступа к закрытой части класса coord, переменные х и у приходиться делать открытыми.

Создание не дружественной функции шода для объектов типа coord iinciude <iGStream> using namespace std;

ostream &operator (ostream eairi, coord ob) {

stream , ob.y \n ; return stream;

int main ()

coord a(l, 1) , b(10, 23) ; . -л

cou a b;

return 0; ...



62 Самоучитель C++

class coord { public:

int x, у; должны быть открытыми

coord{) { X = 0; у - 0; }

coord (inti, int j) { x = i; у = j; }

Пользовательская функции ода для объектов класса coord ostream soperato (ostream sstream, coord ob) {

stream -c ob.x ob.y \n; return stream;

coord a(l, 1) , b(10, 23) ; cout a b;

return 0;

) c. .,

3. Возможности пользовательских функций вывода не ограничиваются выводом текстовой информации. Они могут выполнить любое действие или преобразование, необходимое для вывода информации в том виде, который требуется из-за особенностей устройства или ситуации. Например, совершенно разумно создать пользовательскую функцию вывода для отправки информации на плоттер. В этом случае, кроме собственно информации, функция передаст предназначенные для управления плоттером коды. Чтобы вы могли почувствовать вкус к такого рода функциям, в следующей программе создается класс triangle, в котором хранится ширина и высота прямоугольного треугольника. Пользовательская функция вывода этого класса выводит треугольник на экран.

Эта программа рисует прямоугольные треугольники tinclude <iostreain>

using namespace std; . . ,

class triangle { .

int height, base; :. : . -

public;

triangle (int h, int b) { height ase= b; }

friend ostream Soperator (ostream Sstream, triangle ob) ;

< i

рисование треугольника

ostream &operator- (ostream Sstream, triangle ob) (

int i, j, h, k;



I

int main() {

triangle! (5, 5), t2 (10, 10), t3(12, 12); cout tl;

cout endl << endl t3; return 0;

Отметьте, что должным образом разработанная пользовательская функция вывода может быть целиком вставлена в обычное выражение ввода/вывода. После выполнения программы на экран выводится следующее:

**********

************

* *

* *

* *

i = j base - 1;

for(h=ob.height - 1; h; h -) {

for(k=i; k; к -) stream ;

stream * ;

-i:ij;=i) [

for(k=j - i - 1; k; k -)

stream ; stream * ;

i -;

stream \n;

for(k=0; e; k++) stream

stream \n;

return Stream;



1 ... 82 83 84 [ 85 ] 86 87 88 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика