Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
В данном случае компилятор увидит три функции, независимые от функции
Пример функции
Здесь мы описали небольшую иерархию классов с одной виртуальной функцией
В результате выполнения этой программы получим следующее:
Если вы понимаете, почему, то знаете механизмы наследования и виртуальных
14.3.4. Доступ
• Закрытые (private). Если член класса объявлен с помощью ключевого слова
• Защищенные (protected). Если член класса объявлен с помощью ключевого слова
• Открытые (public). Если член класса объявлен с помощью ключевого слова
Изобразим это на рисунке.
Базовый класс также может иметь атрибут
• Если базовый класс для класса
• Если базовый класс для класса
• Если базовый класс для класса
Эти определения игнорируют понятие дружественной функции или класса и другие детали, которые выходят за рамки рассмотрения нашей книги. Если хотите стать крючкотвором, читайте книги Stroustrup, The Design and Evolution of C++ (Страуструп, “Дизайн и эволюция языка С++”), The C++ Programming Language (Страуструп, “Язык программирования С++”) и стандарт 2003 ISO C++. Мы не рекомендуем вам становиться крючкотвором (т.е. вникать в мельчайшие детали языковых определений) — быть программистом (разработчиком программного обеспечения, инженером, пользователем, назовите как хотите) намного увлекательнее и полезнее для общества.
14.3.5. Чисто виртуальные функции
Абстрактный класс — это класс, который можно использовать только в качестве базового. Абстрактные классы используются для представления абстрактных понятий; иначе говоря, мы используем абстрактные классы для описания понятий, которые являются обобщением общих характеристик связанных между собой сущностей. Описанию абстрактного понятия (abstract concept), абстракции (abstraction) и обобщению (generalization) посвящены толстенные книги по философии. Однако философское определение абстрактного понятия мало полезно. Примерами являются понятие “животное” (в противоположность конкретному виду животного), “драйвер устройства” (в противоположность драйверу конкретного вида устройств) и “публикация” (в противоположность конкретному виду книг или журналов). В программах абстрактные классы обычно определяют интерфейсы групп связанных между собой классов (иерархии классов).