|
Программирование >> Структурное программирование
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; } возможность сцепленных вызовов
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |