05.09.2016 Views

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

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

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

Saved successfully!

Ooh no, something went wrong!