Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 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;}

};

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных