|
Программирование >> Структурное программирование
; return output; допускает сцепленные вызовы Заметим, что хотя класс Shape является абстрактным базовым классом, он, однако, содержит реализации некоторых функций-элементов; и эти реализации являются наследуемыми. Класс Shape предоставляет наследуемый интерфейс в виде четырех виртуальных функций, которые будут входить во все элементы иерархии. В классе Shape представлены также некоторые реализации, которые будут использоваться производными классами нескольких первых уровней иерархии. I P0INT1.H Определение класса Point ?.?;J tifndef P0INT1 H tdefine P0INT1 H tinclude <iostream.h> ..! J tinclude shape.h class Point : public Shape { friend ostream &operator<<(ostream &, const Point &); public: Point(float = 0, float = 0); Конструктор с умолчанием void setPoint(float, float); float getXO const { return x; } float getYO const { return y; } jj.:; virtual void printShapeName () const { cout << Точка: ; } A- virtual void print() const; private: float X, y; Координаты x и у класса Point tendif Рис. 10.2. Определение класса Point (часть 2 из 9) P0INT1.CPP Определения функций-элементов класса Point tinclude <iostream.h> tinclude pointl.h Point::Point (float a, float b) { setPoint(a, b); } void Point::setPoint(float a, float b) { X = a; y=b; void Point: :print 0 const { cout [ x , << у ] ; } Щ ostream &operator<< (ostream Soutput, const Point &p) { H p.print(); вызов функции print для печати объекта { radius = г > О ? г : 0; } void Circle: : setRadius (float r) { radius = r > 0 ? r : 0; } float Circle::getRadius() const { return radius; } oat Circle::area() const { return 3.14159 * radius * radius; } Circle :: print () const cout [ getXO , getYO ]; Радиус = << setiosflags(ios::showpoint) setprecision (2 ) radius; ostream &operator<< (ostream Soutput, const Circle &c) { c.printO; вызов функции print для печати объекта return output; допускает сцепленные вызовы CIRCLEl.H Определение класса Circle #ifndef CIRCLE1 H m #define CIRCLE1 H tinclude pointl.h class Circle : public Point { friend ostream &operator<< (ostream &, const Circle &); t-f-jl public: .-i- I Конструктор с умолчанием Circle(float г = 0.0, float x = 0.0, float у = 0.0); void setRadius(float); float getRadiusO const; virtual float areaO const; *.;;:-. virtual void printShapeName () const { cout Круг: ; } virtual void print () const; private: float radius; Радиус круга #endif Рис. 10.2. Определение класса Circle (часть 4 из 9) CIRCLE1.CPP Определение функций-элементов класса Circle ..f iinclude <iostream.h> iinclude <iomanip.h> . iinclude circlel.h Circle:: Circle (float r, float a, float b) : Point (a, b) Вызов конструктора базового класса Ш < Circle: :print 0 ; cout ; Высота = height; ostream Soperator << (ostream Soutput, const Cylinders c) { c.printO; вызов функции print для печати объекта , return output; допускает сцепленные вызовы CYLINDR1.H Определение класса Cylinder tifndef CYLINDR1 H tdefine CYLINDR1 H tinclude circlel.h -class Cylinder : public Circle { friend ostream &operator<< (ostream &, const Cylinder &); public: Конструктор с умолчанием Cylinder ( float h = 0.0, float r = 0.0, float X = 0.0, float у = 0.0); void setHeight(float); virtual float areaO const; virtual float voltime () const; virtual void printShapeName() const { cout Цилиндр: ; } virtual void print() const; private: float height; Высота цилиндра tendif Рис. 10.2. Определение класса Cylinder (часть 6 из 9) Эр CYLINDR1.CPP Определение функций-элементов и дружественных функций класса Ш: II Cylinder tinclude <iostream.h> йй; tinclude <iomanip.h> tinclude cylindrl.h **?5 Cylinder::Cylinder (float h, float r, float x, float y) tVv. : Circle (r, x, y) вызов конструктора базового класса { height = h > О ? h : 0; } void Cylinder:: setHeight (float h) { height = h > 0 ? h : 0; } float Cylinder:I area 0 const Площадь поверхности цилиндра return 2 * Circle::area О + 2 * 3.14159 * Circle::getRadius0 * height; float Cylinder::volume() const { return Circle::area() * height; } HSf void Cylinder::print() const
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |