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