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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

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

Если в классе Pegasus эта функция будет замещена, то проблема решится сама собой, так как в этом случае вызывается функция-член класса Pegasus:

virtual COLOR GetColor()const { return Horse::GetColor(); }

Таким образом, проблему неопределенности можно обойти благодаря инкапсуляции явного указания базового класса в объявлении замещенной функции. Если возникнет необходимость использовать метод другого класса, то обращение к нему с помощью приведенного ниже выражения не будет ошибкой.

COLOR currentColor = pPeg->Bird::GetColor();

Наследование от общего базового класса

Что произойдет, если оба базовых класса, от которых производится другой класс, сами были произведены от одного общего базового класса, как, например, классы Bird и Horse от класса Animal. Эта ситуация показана на рис. 13.2.

Рис 132 Общий базовый класс Как показано на рис 132 два класса - фото 35

Рис. 13.2. Общий базовый класс

Как показано на рис. 13.2, два класса, являющихся базовыми для класса Pegasus, сами производятся от одного общего класса Animal. Компилятор при этом рассматривает классы Bird и Horse как производные от двух одноименных базовых классов, что

может привести к очередной неопределенности. Например, если в классе Animal объявлены переменная-член itsAge и функция-член GetAge(), а в программе делается вызов pGet->GetAge(), то будет ли при этом вызываться функция GetAge(), унаследованная классом Bird от класса Animal или классом Horse от базового класса? Это противоречие разрешается в листинге 13.5.

Листинг 13.5. Общий базовый класс

1: // Листинг 13.5.

2: // Общий базовый класс

3: #include

4:

5: typedef int HANDS;

6: enum COLOR { Red, Green, Blue, Yellow, White, Black, Brown }

7:

8: class Animal // общий базовый класс для классов horse и bird

9: {

10: public:

11: Animal(int);

12: virtual ~Animal() { cout << "Animal destructor...\n"; }

13: virtual int GetAge() const { return itsAge; }

14: virtual void SetAge(int age) { itsAge = age; }

15: private:

16: int itsAge;

17: };

18:

19: Animal::Animal(int age):

20: itsAge(age)

21: {

22: cout << "Animal constructor...\n";

23: }

24:

25: class Horse : public Animal

26: {

27: public:

28: Horse(COLOR color, HANDS height, int age);

29: virtual ~Horse() { cout << "Horse destructor...\n"; }

30: virtual void Whinny()const { cout << "Whinny!... "; }

31: virtual HANOS GetHeight() const { return itsHeight; }

32: virtual COLOR GetColor() const { return itsColor; }

33: protected:

34: HANDS itsHeight;

35: COLOR itsColor;

36: };

37:

38: Horse::Horse(C0L0R color, HANDS height, int age):

39: Animal(age),

40: itsColor(color),itsHeight(height)

41: {

42: cout << "Horse constructor...\n";

43: }

44:

45: class Bird : public Animal

46: {

47: public:

48: Bird(COLOR color, bool migrates, int age);

49: virtual ~Bird() { cout << "Bird destructor...\n"; }

50: virtual void Chirp()const { cout << "Chirp... "; }

51: virtual void Fly()const

52: { cout << "I can fly! I can fly! I can fly! "; }

53: virtual C0L0R GetColor()const { return itsColor; }

54: virtual bool GetMigration() const { return itsMigration; }

55: protected:

56: COLOR itsColor;

57: bool itsMigration;

58: };

59:

60: Bird::Bird(COLOR color, bool migrates, int age):

61: Animal(age),

62: itsColor(color), itsMigration(migrates)

63: {

64: cout << "Bird constructor...\n";

65: }

66:

67: class Pegasus : public Horse, public Bird

68: {

69: public:

70: void Chirp()const { Whinny(); }

71: Pegasus(COLOR, HANDS, bool, long, int);

72: virtual ~Pegasus() { cout << "Pegasus destructor...\n";}

73: virtual long GetNumberBelievers() const

74: { return itsNumberBelievers; }

75: virtual COLOR GetColor()const { return Horse::itsColor; }

76: virtual int GetAge() const { return Horse::GetAge(); }

77: private:

78: long itsNumberBelievers;

79: };

80:

81: Pegasus::Pegasus(

82: COLOR aColor,

83: HANDS height,

84: bool migrates,

85: long NumBelieve,

86: int age):

87: Horse(aColor, height,age),

88: Bird(aColor, migrates,age),

89: itsNumberBelievers(NumBelieve)

90: {

91: cout << "Pegasus constructor...\n";

92: }

93:

94: int main()

95: {

96: Pegasus *pPeg = new Pegasus(Red. 5, true, 10, 2);

97: int age = pPeg->GetAge();

98: cout << "This pegasus is " << age << " years old.\n";

99: delete pPeg;

100: return 0;

101: }

Результат:

Animal constructor...

Horse constructor...

Animal constructor...

Bird constructor...

Pegasus constructor...

This pegasus is 2 years old.

Pegasus destructor.,.

Bird destructor...

Animal destructor...

Horse destructor...

Animal destructor...

Анализ:В листинге содержится ряд интересных решений. Так, в строках 8—17 объявляется новый класс Animal с переменной-членом itsAge и двумя методами — GetAge() и SetAge().

В строке 25 класс Horse производится от класса Animal. Конструктор класса Horse теперь имеет третий параметр age, который передается в базовый класс Animal. Обратите внимание, что в классе Horse метод GetAge() не замещается, а просто наследуется.

В строке 46 класс Bird производится от класса Animal. Конструктор этого класса также содержит параметр age, с помощью которого инициализируется базовый класс Animal. Метод GetAge() также наследуется этим классом без замещения.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x