ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Наследование классовВ С++ класс наследует методы и свойств от своих базовых классов. Наследующий класс называется производным. Когда создаётся объект производного класса, то он содержит все переменные, которые были объявлены в базовом классе и кроме того, дополнительно, объявленные в нём самом. Точно так же к нему можно применять как методы объявленные в нём самом, так и метнды наследованные от базового класса. Если в декларации методов тип возвращаемого значения и типы аргументов совпадают с теми которые были указаны в базовом классе, то происходит перекрытии метода. Будут вызываться методы в зависимости от класса переменной или указателя. Следует отметить, что в С++ существует множественное наследование, т.е. от многих классов. Каждый их классов в списке базовых указывается со своим атрибутом доступа, который в общем случае изменяет атрибуты наследуемых элементов – переменных (полей) и методов: 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;} };
Не нашли, что искали? Воспользуйтесь поиском:
|