Наследование классов. Пример
В С++ класс наследует методы и свойств от своих базовых классов. Наследующий класс называется производным. Когда создаётся объект производного класса, то он содержит все переменные, которые были объявлены в базовом классе и кроме того, дополнительно, объявленные в нём самом. Точно так же к нему можно применять как методы объявленные в нём самом, так и метнды наследованные от базового класса. Если в декларации методов тип возвращаемого значения и типы аргументов совпадают с теми которые были указаны в базовом классе, то происходит перекрытии метода.
Будут вызываться методы в зависимости от класса переменной или указателя. Следует отметить, что в С++ существует множественное наследование, т.е. от многих классов. Каждый их классов в списке базовых указывается со своим атрибутом доступа, который в общем случае изменяет атрибуты наследуемых элементов – переменных (полей) и методов:
class Overdraft1: public BankAccout, protected Cash//список наследования от 2-х классов
{…}
Самостоятельно:
1. назначение атрибута доступа protected
2. влияние атрибутов доступа в списке наследования на атрибуты доступа наследуемых элементов
3. назначение ключевого слова virtual в списке наследования классов; обратить внимание на ситуацию множественного наследования.
Пример
Даётся определение класса BankAccount (банковский счёт), который является исходным для реализации других более совершенных классов на его основе:
class BankAccount
{
private:
enum {MAX=35};
char fullName[MAX];//имя клиента
long acctNum;//номер счёта
double balance;//текущий баланс
public:
BankAccount(const char* s = "NULLBody",
long an=-1,double bal = 0.0);
void Deposit(double amt);//внесение вклада
void Withdraw(double amt);//снятие со счёта
double Balance() const;//тек. баланс
void ViewAcct() const;//вывод инф. о счёте
};
Реализацию дадим позже.
На основе этого класса создаётся новый Overdraft. Он обладает всеми свойствами и поведением исходного класса. Поэтому говорят, что между классами Overdraft и BankAccount реализуется отношение is-a («является тем же»). Новый класс добавляет некие свои переменные и перекрывает некоторые методы, реализуя собственные:
class Overdraft: public BankAccount
{
private:
double maxLoan;//макс значение задолжености
double rate;//тариф процентной ставки
double owesBank;//текущая задолженость
public:
Overdraft(const char* s = "NULLBody",
long an=-1,double bal = 0.0, double ml =500,double r=0.1);
void ViewAcct() const;
void Withdraw(double amt);
void ResetMax(double m){maxLoan = m;}
void ResetRate(double r){rate = r;}
void ResetOwes(){owesBank = 0;}
};
Дата добавления: 2016-05-26; просмотров: 1344;