Дружественные классы и наследование.pptx
- Количество слайдов: 21
Дружественные классы и наследование
Дружественные функции Аргументы класса объявленные как private и protected не могут быть доступны вне класса, но это правило не применяется для friend классов. Friend(дружественные) классы или функции объявляются с ключевым словом friend.
• Если мы хотим, чтобы внешняя функция имела доступ к скрытым аргументам класса, то внутри класса объявляем прототип функции вместе с ключевым словом friend. class CRectangle { int width, height; public: void set_values (int, int); int area () {return (width * height); } friend CRectangle duplicate (CRectangle); };
#include
Дружественные классы • Дружественность не двусторонне • Дружественность не транзитивное, то есть друга не может стать другом
#include
void CRectangle: : convert (CSquare a) { width = a. side; height = a. side; } int main () { CSquare sqr; CRectangle rect; sqr. set_side(4); rect. convert(sqr); cout << rect. area(); return 0; }
Наследование классов • Основным свойством классов в С++ это наследование. Наследование позволяет создавать новые классы на основе других с сохранением некоторых свойств родительского класса и с возможностью объявления новых свойств в производном классе.
Пример - многоугольники
Синтаксис наследования • class название_производного_класса: public название_родительского_класса{ /*. . . */ };
// derived classes #include
int main () { CRectangle rect; CTriangle trgl; rect. set_values (4, 5); trgl. set_values (4, 5); cout << rect. area() << endl; cout << trgl. area() << endl; return 0; }
Общие аргументы классов CRectangle и CTriangle • width • height • set_values(). • Свойства width и height объявлены как protected, так как они должны быть видны в производных классах.
Доступность аргументов класса в зависимости от спецификаторов Доступ Public Protected Private Аргументы самого класса Да Да Да Аргументы производного класса Да Да Нет Внешние объекты Да Нет
Передача уровней доступности • class CRectangle: public CPolygon {. . . } – Передается максимальный уровень доступности • class daughter: protected mother; – максимальный уровень доступности protected, то есть все public свойства производного класса становятся protected
Что наследуется от родительского класса Наследуется все, кроме: – Конструкторы и деструктор – Оператор = – Дружественные связи
// constructors and derived classes #include
Результаты • mother: no parameters • daughter: int parameter • mother: int parameter • son: int parameter
Множественное наследование В С++ также есть возможность наследования свойств более одного класса: • class CRectangle: public CPolygon, public COutput; • class CTriangle: public CPolygon, public Coutput;
• // multiple inheritance • #include
• class CRectangle: public CPolygon, public COutput { • public: • int area () • { return (width * height); } • }; • class CTriangle: public CPolygon, public COutput { • public: • int area () • { return (width * height / 2); } • }; • • int main () { • CRectangle rect; • CTriangle trgl; • rect. set_values (4, 5); • trgl. set_values (4, 5); • rect. output (rect. area()); • trgl. output (trgl. area()); • return 0; • }