Чтение онлайн

ЖАНРЫ

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

14: int itsSecond;

15: int itsThird;

16: static int itsStatic;

17: }

18:

19: myClass::myClass

20: itsMember(1),

21: itsSecond(2),

22: itsThird(3)

23: {

24: itsStatic++;

25: }

27: myClass::^rnyClass

28: {

29: itsStatic--;

30: cout << "In destructor. ItsStatic: " << itsStatic << endl;

31: }

32:

33: void myClass::ShowMember

34: {

35: cout << "itsMember: " << itsMember << endl;

36: }

37:

38: void myCIass:: ShowSecond

39: {

40: cout << "itsSecond: " << itsSecond << endl;

41: }

42:

43: void myClass::ShowThird

44: {

45: cout << "itsThird: " << itsThird << endl;

46: }

47: int myClass::itsStatic = 0;

48:

49: int myClass::GetStatic

50: {

51: return itsStatic;

52: }

53:

54: int main

55: {

56: void (myClass::*PMF) ;

57:

58: myClass obj1;

59: PMF=myClass::ShowMember;

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 <iostream.h>

2: #include <string.h>

3:

4: class String

5: {

6: public:

7: // конструкторы

8: String;

9: String(const char *const):

10: String(const String &);

11: ~String;

12:

13: // перегруженные операторы

14: char & operator[](int offset);

15: char operator[](int offset) const:

16: String operator+(const String&);

17: void operator+=(const String&);

18: String & operator= (const String &);

19: friend ostream& operator<<

20: ( ostream& _theStream,String& theString);

21: friend ist.ream& operator>>

22: ( istream& _theStream,String& theString);

23: // Общие функции доступа

24: int GetLenconst { return itsLen; }

25: const char * GetString const { return itsString; }

Поделиться с друзьями: