Джесс Либерти - Освой самостоятельно С++ за 21 день.

Здесь есть возможность читать онлайн «Джесс Либерти - Освой самостоятельно С++ за 21 день.» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Освой самостоятельно С++ за 21 день.: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Освой самостоятельно С++ за 21 день.»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.
Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Освой самостоятельно С++ за 21 день.», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

1. Содержит ли базовый класс PartsList методы, не применимые в классе PartsCatalog? Если да, то, вероятно, от открытого наследования лучше отказаться.

2. Будет ли один объект класса PartsCatalog соответствовать одному объекту класса PartsList? Если для создания объекта требуется не менее двух объектов PartsList, то, безусловно, необходимо применять вложение.

3. Обеспечит ли наследование от базового класса преимущества в работе благодаря использованию виртуальных функций или методов доступа к защищенным членам базового класса? В случае положительного ответа имеет смысл воспользоваться открытым или закрытым наследованием.

Ответив на приведенные выше вопросы, вы должны принять решение, использовать ли вам в программе открытое наследование, закрытое наследование (см. далее в этом занятии) или вложение. Познакомимся с некоторыми терминами, которые потребуются нам при дальнейшем обсуждении этой темы.

Вложение — объект, относящийся к другому классу, используется в текущий класс.

Делегирование — передача ответственности за выполнение специальных функций вложенному классу.

Выполнение средствами класса — реализация специальных функций в классе за счет другого класса без использования открытого наследования.

Делегирование

Почему же класс PartsCatalog нельзя произвести от PartsList? Дело в том, что класс PartsCatalog должен обладать совершенно иными свойствами и ero невозможно представить как частную реализацию класса PartsList. Посмотрите, класс PartsList — это коллекция объектов, упорядоченная по возрастанию номеров, элементы которой могут повторяться. Класс PartsCatalog представляет неупорядоченную коллекцию уникальных объектов.

Конечно, при желании можно произвести класс PartsList от класса PartsList со спецификатором public, после чего соответствующим образом заместить функцию Insert() и оператор индексирования ([]). Однако такие действия крайне нелогичны и противоречат самой сути наследования. Вместо этого следует создать новый класс PartsCatalog, в котором нет оператора индексирования, не разрешается дублирование записей и перегружается operator+ для суммирования наборов записей. Функцию управления связанным списком оставим классу PartsList.

Попробуем сначала решить эту задачу путем вложения одного класса в другой с делегированием ответственности от класса классу, как показано в листинге 15.5.

Листинг 15.5. Делегирование ответственности классу PartsList, включенному в класс PartsCatalog

1: #include

2:

3: // **************** Класс Part ************

4:

5: // Абстрактный базовый класс всех деталей

6: class Part

7: {

8: public:

9: Part():itsPartNumber(1) { }

10: Part(int PartNumber):

11: itsPartNumber(PartNumber){ }

12: virtual ~Part(){ }

13: int GetPartNumber() const

14: { return itsPartNumber; }

15: virtual void Display() const =0;

16: private:

17: int itsPartNumber;

18: };

19:

20: // выполнение чистой виртуальной функции в

21: // стандартном виде для всех производных классов

22: void Part::Display() const

23: {

24: cout << "\nPart Number: " << itsPartNumber << endl;

25: }

26:

27: // ************ Автомобильные детали **********

28:

29: class CarPart : public Part

30: {

31: public:

32: CarPart():itsModelYear(94){ }

33: CarPart(int year, int partNumber);

34: virtual void Display() const

35: {

36: Part::Display();

37: cout << "Model Year: ";

38: cout << itsModelYear << endl;

39: }

40: private:

41: int itsModelYear;

42: };

43:

44: CarPart::CarPart(int year, int partNumber):

45: itsModelYear(year),

46: Part(partNumber)

47: { }

48:

49:

50: // ************* Авиационные детали ************

51:

52: class AirPlanePart : public Part

53: {

54: public:

55: AirPlanePart():itsEngineNumber(1){ }

56: AirPlanePart

57: (int EngineNumber, int PartNumber)

58: virtual void Dlsplay() const

59: {

60: Part::Display();

61: cout << " Engine No.: ";

62: cout << itsEngineNumber << endl;

63: }

64: private:

65: int itsEngineNumber;

66: };

67:

68: AirPlanePart::AirPlanePart

69: (int EngineNumber, int PartNumber):

70: itsEngineNumber(EngineNumber),

71: Part(PartNumber)

72: { }

73:

74: // *************** Узлы списка деталей **********

75: class PartNode

76: {

77: public:

78: PartNode (Part*);

79: ~PartNode();

80: void SetNext(PartNode * node)

81: { itsNext = node; }

82: PartNode * GetNext() const;

83: Part * GetPart() const;

84: private:

85: Part *itsPart;

86: PartNode * itsNext;

87: };

88: // Выполнение PartNode...

89:

90: PartNode::PartNode(Part* pPart):

91: itsPart(pPart),

92: itsNext(0)

93: { }

94:

95: PartNode::~PartNode()

96: {

97: delete itsPart;

98: itsPart = 0;

99: delete itsNext;

100: itsNext = 0;

101: }

102:

103: // Возвращается NULL, если нет следующего узла PartNode

104: PartNode * PartNode::GetNext() const

105: {

106: return itsNext;

107: }

108:

109: Part * PartNode::GetPart() const

110: {

111: if (itsPart)

112: return itsPart;

113: else

114: return NULL; //ошибка

115: }

116:

117:

118:

119: // **************** Список деталей ***********

120: class PartsList

121: {

122: public:

123: PartsList();

124: ~PartsList();

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Освой самостоятельно С++ за 21 день.»

Представляем Вашему вниманию похожие книги на «Освой самостоятельно С++ за 21 день.» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Освой самостоятельно С++ за 21 день.»

Обсуждение, отзывы о книге «Освой самостоятельно С++ за 21 день.» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x