05.09.2016 Views

Стефан Р. - С++ Для чайников

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!