|
Программирование >> Программирование на языке c++
В результате выполнения этой программы на экране будут вычерчены две окружности. Все программы, использующие графику, работают только на персональных компьютерах. Вторая программа демонстрирует доопределение унарных операторов ++ и --, заданных в виде префикса (перед операндом) и суффикса (после операнда). Кроме этого, программа позволяет строить сложные графические фигуры на экране дисплея путем суммирования различных графических объектов. Для выполнения такого суммирования доопределен оператор +. Если осуществляется суммирование нескольких графических объектов, то все они будут изображены на экране. Так, если А, В и С - это графические объекты, то в результате выполнения операций: 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. Скляров
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |