Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Программная реализация класса sieeperSofa выглядит следующим образом:<br />
class Bed<br />
{<br />
public:<br />
Bed (> > }<br />
void sleep(){}<br />
int weight;<br />
);<br />
class Sofa<br />
{<br />
public:<br />
SofaO (}<br />
void watchTV(){}<br />
int weight;<br />
// SleeperSofa — это одновременно и кровать и диван<br />
class SieeperSofa : public Bed, public Sofa<br />
{<br />
public:<br />
SieeperSofa(){}<br />
void foldOut{){}<br />
int main(int argcs, char* pArgs[])<br />
1<br />
SieeperSofa ss;<br />
}<br />
// Вы можете смотреть телевизор, сидя на диване...<br />
ss.wai.chTV () ; // Sofa: :watchTV()<br />
//. . .г. потом можете разложить его. . .<br />
ss.foJ.dOut () ; // SieeperSofa: : f oldOut ()<br />
//. . .у. спать на нем как на кровати<br />
ss.sleep(); // Bed::sleep()<br />
return 0;<br />
В этом примере класс SieeperSofa наследует оба класса — Bed и Sofa. Это видно<br />
из их наличия в объявлении класса SieeperSofa, который наследует все члены от<br />
обоих базовых классов. Таким образом, допустимы оба вызова — как ss . sleep (), так<br />
и ss . watchTV(). Вы можете использовать SieeperSofa и как Bed, и как Sofa. Кроме<br />
того, класс SieeperSofa имеет собственные члены, например foldOut ().<br />
УаЩишение неоднозначностей<br />
множественного<br />
Будучи весьма мошной возможностью языка, множественное наследование может<br />
стать в то же время и источником проблем. Одну из них можно увидеть уже в предыдущем<br />
примере. Обратите внимание, что оба класса — Bed и Sofa — содержат член<br />
weight (вес). Это логично, потому что они оба имеют некоторый вполне измеримый<br />
вес. Вопрос: какой именно член weight наследует класс SieeperSofa?<br />
Глава 28. Множественное наследование 307