68 ______Часть I. Основные характеристики C++

минимальный баланс. Оба этих класса, порожденных от BankAccount

(BankAccount Называется базовым классом ДЛЯ SavingsAccount И

checkingAccount), наследуют функции-члены для внесения и снятия денег, а также функцию TransactionRegister. Во всех трех классах вкладывание средств и их изъятие происходит совершенно одинаковым образом.

Множественное наследование. А что, если вы захотите реализовать класс кредитных карточек? Ведь кредитная карточка — это на самом деле банковский счет; на нее можно класть деньги и снимать с нее, и в то же время она является разновидностью займа. Займы, как правило, обладают такими характеристиками, как процентная ставка, продолжительность займа, ежемесячные выплаты и так далее. Поэтому класс creditcard унаследует свойства как класса BankAccount, так и класса Loan (заем).

Займы, однако, тоже являются банковскими счетами, и класс Loan должен наследовать какие-то свойства класса BankAccount. Минимальный баланс кредитной карты можно застраховать на случай нужды, например, безработицы. Стало быть, это такой же предмет страхования, как ваш дом или автомобиль. insurableitem (предмет страхования) можно рассматривать как базовый класс в сфере вашего личного бюджета. Полагая, что с предметами страхования связаны ежемесячные выплаты (monthlypremium), определим класс insurableitem следующим образом:

class Insurableitem

{

public:

Insurableitem(Amount insuredAmount);

virtual -Insurableltem(void) ;

void setMonthlyPremium(Amount premiumAmount) ;

Amount monthlypremium(void);

private:

Amount monthlypremium;

1;

Еще допустим, что ваша кредитная карточка обеспечена какими-то скидками (rebatePercentage) При покупках. Тогда класс CreditCard, обладающий

свойствами классов BankAccount, insurableitem и вдобавок своими собственными, можно определить так:

class CreditCard: public BankAccount, public Insurableitem

<

public:

CreditCard(Amount creditLimit) ;

virtual -CreditCard(void) ;

void setRebatePercentage(Rate rebatePercentage);

Rate rebatePercentage(void);