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

1 ... 193 194 195 [ 196 ] 197 198 199 ... 342


FIG9 10.CPP Драйвер класса Cylinder #include <iostream.h> iinclude <iomanip.h> iinclude point2.h iinclude circle2.h iinclude cylindr2.h

mam (

создание объекта класса Cylinder Cylinder cyl(5.7, 2.5, 1.2, 2.3);

использование функций get для отображения цилиндра cout << Координата X равна << cyl.getXO << endl Координата Y равна cyl.getY() endl Радиус равен cyl.getRadius() endl Высота равна cyl.getHeight() endl << endl;

использование функций set для изменения атрибутов цилиндра cyl.setHeight(10); cyl.setRadius(4.25) ; cyl.setPoint(2, 2);

cout << Новые координаты, радиус

<< и высота цилиндра: endl << cyl << endl;

отображение цилиндра как Point

Point &pRef = cyl; pRef думает , что это Point

cout << endl << Cylinder, напечатанный как Point: pRef endl endl;

отображение цилиндра как Circle

Circle ScRef = cyl; cRef думает , что это Circle

cout << Cylinder, напечатанный как Circle: << endl

cRef endl Площадь: cRef.areaO endl; return 0;

Координата X равна 1.2 Координата Y равна 2.3 Радиус равен 2.5 Высота равна 5 . 7

Новые координаты, радиус и высота цилиндра:

Центр = [2, 2]; Радиус = 4.25; Высота

10.00

.. Cylinder, нёшечатанный как Point: [2.00, 2.00]

Cylinder, напечатанный как Circle: I Центр = [2.00, 2.00]; Радиус =4.25 Площадь: 56.74

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

Рассмотрим пример множественного наследования на рис. 9.11. Класс Basel содержит один защищенный элемент данных - int value. Basel содержит конструктор, который устанавливает value, и открытую функцию-элемент getData, которая возвращает value.



tendif

Рис. 9.11. Определение класса Base2 (чааь 2 из 6)

DERIVED.Н

11 Определение класса Derived, с множественным наследованием базовых классов (Basel и Base2).

I tifndef DERIVED H tdefine DERIVED H

tinclude basel.h I tinclude base2.h

множественное наследование

class Derived : public Basel, public Base2 {

friend ostream &operator<<(ostream &, const Derived &);

* !!* public:

Derived(int, char, float); float getRealO const;

private:

float real; закрытые данные производного класса

#endif

Рис. 9.11. Определение класса Derived (часть 3 из 6)

BASEL Н

Определение класса Basel tifndef BASE1 H tdefine BASE1 H

class Basel { public:

Basel(int x){ value = x; } int getDataO const { return value; } protected: доступно производным классам

int value; наследуется производными классами

I tendif

Рис. 9.11. Определение класса Basel (часть 1 из 6)

BASE2.H

Определение класса Base2 ,it tifdef BASE2 H .- tdefine BASE2 H

class Base2{ public:

Base2(char c) { letter = c; } кД, char getDataO const { return letter; } - protected: доступно производным классам

char letter; наследуется производными классами



Заметьте, что множественное наследование указывается двоеточием (:) после имени класса (class Derived) с последующим перечислением через запятую базовых классов. Отметим также, что конструктор Derived вызывает конструкторы каждого из своих базовых классов Basel и Base2 с использованием списка инициализаторов элементов. Конструкторы базового класса вызываются в той последовательности, в которой определено наследование, но не в той, в которой эти конструкторы упоминаются.

Перегруженная операция поместить в поток класса Derived использует для печати value, letter и real запись с точкой производного объекта d. Эта функция-операция является другом Derived, так что operator может непосредственно иметь доступ к закрытому элементу данных real класса Derived. Поскольку эта операция - друг производного класса, она может иметь доступ также и к защищенным элементам value и letter классов Basel и Base2 соответственно.

Класс Base2 аналогичен классу Basel, за исключением того, что его защищенным данным является char letter. Base2 имеет также открытую функцию-элемент getData, но эта функция возвращает значение char letter.

Класс Derived порождается двумя классами - Basel и Base2 посредством множественного наследования. Класс Derived имеет закрытый элемент данных float real и открытую функцию-элемент getReal, которая читает значение float real.

DERIVED.СРР

Определения функций-элементов класса Derived #include <iostream.h> tinclude derived.h

Конструктор Derived вызывает конструкторы класса Basel и класса Base2.

Derived::Derived(int i, char c, float f)

: Basel(i), Base2(c) вызов конструкторов обоих базовых

классов

{ real = f; }

I Возвращение значения real

float Derived::getReal() const { return real; }

Отображение всех элементов данных Derived ostream &operator<<(ostream Soutput, const Derived &d) {

output Целое: d.value endl

Символ: << d.letter endl

Действительное: d.real;

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

Рис. 9.11. Определения функций элементов класса Derived (часть 4 из 6)



1 ... 193 194 195 [ 196 ] 197 198 199 ... 342

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