Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Глава 21<br />
Наследование классов<br />
В э*пой главе...<br />
•/ Зачем нужно наследование<br />
S Как наследуется класс<br />
S Конструирование подкласса<br />
• Отношение СОДЕ<strong>Р</strong>ЖИТ<br />
к?<br />
Л*С этой главе обсуждается наследование (inheritance), т.е. способность одного<br />
А^' класса наследовать возможности или свойства другого класса.<br />
Наследование — это общепринятая концепция. Я — человек (за исключением<br />
раннего утра...). И я наследую некоторые свойства класса Человек, например возможность<br />
говорить (в большей или меньшей степени), интеллект (надеюсь, что<br />
в большей степени), необходимость в воздухе, воде, пище и всяких витаминах. Эти<br />
свойства не являются уникальными для каждого отдельного человека. Очевидно, что<br />
класс Человек наследует зависимость от воды, воздуха и пищи у класса Млекопитающие,<br />
который, в свою очередь, наследует эти свойства у класса Животные.<br />
Концепция, в основе которой лежит способность передавать свойства по наследству,<br />
очень мошная. Благодаря ей можно значительно сэкономить место при описании<br />
реального объекта. Например, если мой сын спросит: "Что такое утка?", я смогу сказать:<br />
"Это птица, которая крякает". Несмотря на краткость, этот ответ несет в себе<br />
всю необходимую для описания утки (по крайней мере, для моего сына) информацию.<br />
Мой сын знает, что такое птица, и может понять, что утке присущи все свойства<br />
птицы плюс свойство "кряканье".<br />
В объектно-ориентированных языках такая наследственная связь выражается<br />
в возможности одного класса наследовать другой. Таким образом, объектноориентированные<br />
языки позволяют создавать модели, более близкие к реальному миру<br />
(а именно для этого они и созданы), чем модели, построенные с помощью языков,<br />
не поддерживающих наследование.<br />
В C++ один класс может наследовать другой следующим образом:<br />
class Student<br />
class GraduateStudent : public Student<br />
I<br />
};<br />
В этом примере GraduateStudent наследует все члены класса Student. Таким<br />
образом, GraduateStudent ЯВЛЯЕТСЯ студентом. Конечно, при этом GraduateStudent<br />
может также содержать уникальные, присущие именно ему члены.<br />
Зачем нужно наследование<br />
Наследование бьою включено в C++ по нескольким причинам. Конечно, основной<br />
из них была необходимость выражать связи между классами с помощью наследования<br />
(к этому я еще вернусь). Менее важной целью было уменьшение размера исходного<br />
Глава 21. Наследование классов 225