60: (obj1.*PMF)();
61: PMF=myClass::ShowSecond;
62: (obj1.*PMF)();
63: PMF=myClass::ShowThird;
64: (ob]1 "PMF)();
65: cout << "Static: " << myClass::GetStatic() << endl;
66:
67: myClass obj2;
68: PMF=myClass::ShowMerober;
69: (obj2.*PMF)();
70: PMF=myClass::ShowSecond;
71: (obj2.*PMF)();
72: PMF=myClass::ShowThird;
73: (obj2. *PMF)();
74: cout << "Static: " << myClass::GetStatic() << endl;
75:
76: myClass obj3;
77: PMF=myClass::ShowMember;
78: (obj3. *PMF)();
79: PMF=myClass::ShowSecond;
80: (obj3.*PMF)();
81: PMF=royClass::ShowThird;
82: (obj3.*PMF)();
83: cout << "Static: " << myClass::GetStatic() << endl;
84: return 0;
85: }
День 15
Контрольные вопросы
1. Как объявить класс, являющийся частным проявлением другого класса?
С помощью открытого наследования.
2. Как объявить класс, объекты которого должны использоваться в качестве переменных-членов другого класса?
Необходимо использовать вложение классов.
3. В чем состоят различия между вложением и делегированием?
Под вложением понимают использование объектов одного класса в качестве переменных-членов другого класса. Под делегированием — передачу одним классом другому классу выполнения некоторых специфических функций. В то же время делегирование часто реализуется за счет вложения классов.
4. В чем состоят различия между делегированием и выполнением класса в пределах другого класса?
Под делегированием понимают передачу одним классом другому классу выполнения некоторых специфических функций. Под реализацией в пределах другого класса — наследование выполнения специфических функций от другого класса.
5. Что такое функция-друг?
Это функция, объявленная с целью получения доступа к защищенным и закрытым членам другого класса.
6. Что такое класс-друг?
Зто класс, объявленный таким образом, чтобы все его функции-члены были дружественными по отношению к другому классу.
7. Если класс Dog является другом Boy, то можно ли сказать, что Boy — друг Dog?
Нет, дружественность классов не взаимна.
8. Если класс Dog является другом Boy, а Terrier произведен от Dog, является ли Terrier другом Boy?
Нет, дружественность классов не наследуется.
9. Если класс Dog является другом Boy, а Boy — другом House, можно ли считать Dog другом House?
Нет, дружественность классов не ассоциативна.
10. Где необходимо размешать объявление функции-друга?
В любом месте внутри объявления класса. Не имеет никакого значения, в каком именно разделе будет помешено это объявление — в public:, protected: или private:.
Упражнения
1. Объявите класс Animal (Животное), который содержит переменную-член, являющуюся объектом класса String.
class Animal:
{
private:
String itsName;
};
2. Опишите класс BoundedArray, являющийся массивом.
class boundedArray : public Array
{
// ...
}
3. Опишите класс Set, выполняемый в пределах массива BoundedArray.
class Set : private Array
{
// ...
}
4. Измените листинг 15.1 таким образом, чтобы класс String включал перегруженный
оператор вывода (>>).
1: #include
2: #include
3:
4: class String