Программирование >>  Структурное программирование 

1 ... 191 192 193 [ 194 ] 195 196 197 ... 342


P0INT2.H

Определение класса Point #ifndef P0INT2 H #define P0INT2 H

class Point {

friend ostream &operator (ostream &, const Point &); public:

Point(float = 0, float = 0); конструктор с умолчанием

void setPoint(float, float); установка координат

float getXO const { return x; } получение координаты x

float getYO const { return y; } получение координаты у

protected: доступно производным классам

float X, у; координаты Point

#endif

Рис. 9.8. Определение класса Point (часть 1 из 3)

P0INT2.CPP

Функции-элементы класса Point iinclude <iostream.h> iinclude point2.h

конструктор класса Point Point::Point(float a, float b)

setPoint(a, b); }

установка координат x и у

void Point::setPoint(float a, float b)

X = a; У = b;

вывод Point

ostream &operator (ostream Soutput, const Point sp) {

output [ р.х , р.у ];

return output; }

возможность сцепления

Рис. 9.8. Функции элементы класса Point (чааь 2 из 3)

Наш следующий пример показан на рис. 9.9, части с 1 по 3. Здесь повторно использованы определение класса Point и определения функций-элементов из рис. 9.8. В частях с 1 по 3 показаны описание класса Circle, определения функций-элементов класса Circle и его программа драйвер. Заметим, что класс Circle наследуется от класса Point открытым наследованием. Это означает, что открытый интерфейс Circle включает функции-элементы Point и дополнительные функции-элементы setRadius, getRadius и area. Заметим, что перегруженная операция поместить в поток класса Circle способна ссылаться на переменные X и у непосредственно, потому что это - защищенные элементы базового класса Point. Заметим также, что необходимо ссылаться на переменные х и у через объект: с.х и су. Это вызвано тем, что перегруженная операция поместить в поток не является функцией-элементом класса Circle.



; T Координата X равна 7 . 2 Координата У равна 11.5

Новая точка р равна [10, 10]

Рис. 9.8. Драйвер класса Point (часть 3 из 3)

Программа драйвер создает объект класса Circle, затем использует функции доступа, чтобы получить информацию об объекте класса Circle. Функция main не является ни функцией-элементом, ни другом класса Circle, так что она не может непосредственно ссылаться на защищенные данные класса Circle. Затем программа драйвер использует функции установки setRadius и setPoint для переустановки радиуса и координат центра круга. В заключение драйвер инициализирует переменную ссылку pRef типа ссылка на объект класса Point* (Point &), указывая на объект с класса Circle. Затем драйвер печатает pRef, который, несмотря на тот факт, что он инициализирован объектом класса Circle, думает , что это объект Point, так что на самом деле объект класса Circle печатается как объект класса Point.

Наш последний пример показан на рис. 9.10, части с 1 по 3. Здесь повторно использованы определения классов Point и Circle и определения их функций-элементов на рис. 9.8 и 9.9. В частях с 1 по 3 показаны определение класса Cylinder, определения функций-элементов Cylinder и программа драйвер соответственно. Заметим, что класс Cylinder наследуется от класса Circle открытым наследованием. Это означает, что открытый интерфейс класса Cylinder включает функции-элементы класса Circle а также функции-элементы setHeight, getHeight, area (переопределенную) и volume. Заметим, что перегруженная операция поместить в поток класса Cylinder способна ссылаться на переменные х, у и radius непосредственно, так как это - защищенные элементы базового класса Circle (х и у были унаследованы Circle от Point).

FIG9 8.CPP Драйвер класса Point #include <iostream.h> tinclude point2.h

main() {

Point p(7.2, 11.5); создание объекта p класса Point

защищенные данные Point недоступны main cout Координата X равна p.getX()

<< endl << Координата Y равна << p.getYO;

p.setPointdO, 10) ;

cout << endl << endl << Новая точка p равна p endl;

return 0;



Глава 9

CIRCLE2.H

Определение класса Circle #ifndef CIRCLE2 H #define CIRCLE2 H

#include point2.h

class Circle : public Point (

friend ostream &operator (ostream &, const Circle &) public:

конструктор с умолчанием

Circle(float r = 0.0, float x = 0, float у = 0);

void setRadius(float); float getRadiusO const; float areaO const; protected:

float radius;

установка радиуса возвращение радиуса вычисление площади

доступно производным классам

радиус круга

#endif

Рис. 9.9. Определение класса Circle (часть 1 из 3)

CIRCLE2.CPP

Определения функций-элементов класса Circle

#include <iostream.li> #include <iomanip.h> #include circle2.1i

Конструктор Circle вызывает конструктор Point с помощью

инициализаторов элементов и задает начальное значение радиуса

Circle::Circle(float г, float а, float b)

: Point (a, b) вызов конструктора базового класса

{ radius = г; }

Установка радиуса

void Circle::setRadius(float г) { radius = г; } Получение радиуса

float Circle::getRadius() const { return radius; }

Вычисление площади круга float Circle::area () const

( return 3.14159 * radius * radius; }

Вывод круга в формате:

Центр = [х, у]; Радиус = #.##

ostream &operator (ostream Soutput, const Circle &c) {

output Центр = [ c.x , <<c.y

]; Радиус = setiosflags(ios::showpoint) << setprecision(2) << c.radius;

return output; }

возможность сцепленных вызовов



1 ... 191 192 193 [ 194 ] 195 196 197 ... 342

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