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

1 ... 60 61 62 [ 63 ] 64 65 66 ... 159


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

Вторая программа демонстрирует доопределение унарных операторов ++ и --, заданных в виде префикса (перед операндом) и суффикса (после операнда). Кроме этого, программа позволяет строить сложные графические фигуры на экране дисплея путем суммирования различных графических объектов. Для выполнения такого суммирования доопределен оператор +. Если осуществляется суммирование нескольких графических объектов, то все они будут изображены на экране. Так, если А, В и С - это графические объекты, то в результате выполнения операций: A-i-B-i-C соответствующие графические фигуры появятся на экране (A-t-B-i-C - означает добавление на экран и А, и В, и С).

#include <iostream.h> #include <graphics.h> #include <conio.h>

class shape { абстрактный класс shape (графическая форма) public:

virtual void draw()=0; абстрактная виртуальная функция friend shape& operator-b(shape& sh1,shape& sh2) доопре-{ sh1.draw(); sh2.draw(); return sh1; } деление оператора +

class rect : public shape { класс rect (прямоугольник)

int xb,yb,xe,ye; public:

rect{int Xb.int Yb.int Xe.int Ye) : xb(Xb),yb(Yb),xe(Xe),ye(Ye) {} void operator-H-() { хЫ-=5; хе-Ь=5; } префиксный

оператор -Н-

void operator+-b(int) { уЫ-=5; уе-Ь=5; } суффикс-

оператор -Н-void operator~() { xb-=5; хе-=5; } префиксный оператор -void operator-(int) { yb-=5; уе-=5; } суффикс-оператор -void drawO { ::rectangle(xb,yb,xe,ye); }

class circ : public shape { класс circ (окружность)



int x.y.radius; public:

circ(int X.int Y.int R) : x{X).y(Y),radius(R) {} void drawQ { ::circle(x,y,radius); }

class line : public shape { класс line (линия)

int xb,yb,xe,ye; public:

linejint Xb.int Yb.int Xe.int Ye) : xb(Xb),yb(Yb),xe(Xe),ye(Ye) {} void draw() { ::lir>e(xb,yb,xe,ye); }

void main(void) { int gd=DETECT,gm; imtgraph(&gd, &gm, );

rect r1(10,20,50,60); r1 - объект класса прямоугольник rect г2(30,40,100,100); г2 - объект класса прямоугольник rect гЗ( 130,140,200,200); гЗ - объект класса

прямоугольник rect г4(230,240,300,300); г4 - объект класса

прямоугольник circ с1(100,100,25); с1 - объект класса окружность circ с2(400,150,100); с2 - объект класса окружность line 11(30,40,100,100); И - объект класса линия г1+г2+гЗ+г4+с1+с2+11; вычерчивание сложной фигуры for(int i=0;i<50;i++) добавление на экран 50 новых фигур

{ ++г2; г2+г2; } for(i=0;i<50;i++) добавление на экран 50 новых фигур

{ г2++; г2+г2; } for(i=0;i<50;i++) добавление на экран 50 новых фигур

{-г2;г2+г2; } for(i=0;i<50;i++) добавление на экран 50 новых фигур

{ г2-; г2+г2; } getchQ; всего в 4 циклах будет добавлено 200 новых фигур



closegraphO;

Третья программа показывает возможные ошибки, которые могут возникать при неправильном использовании функции operator.

#include <iostream.h>

class complex { класс комплексное число

double re,im; public:

complex(double RE,double IM) : re{RE), im(IM) {}

здесь задаются две допустимые формы функции operator* complex operator*(complex b)

{ return complex(re*b.re,im*b.im); } complex operator*(double b)

{ return complex(re*b,im*b); } friend ostream& operator (ostream& stream,complex C) { stream C.re V C.im endl; return stream; }

void main(void) { complex x(2,3);

ниже используется вторая форма функции operator*

cout х*6; Результат: 12 18

cout << 6*х; ошибка: illegal structure operation

Инструкция cout 6*х будет работать правильно, если рассмотреть глобальные версии функции operator*. Например, приведенную программу можно изменить следующим образом:

#include <iostream.h> class complex {

double re,im; public:

complex(double RE,doubie IM) : re(RE), im(IM) {}

7 B. A. Скляров



1 ... 60 61 62 [ 63 ] 64 65 66 ... 159

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