Реализация на понятието наследяване в MS Visual C++. Наследяване на методи. Правила за достъп до полета и методи. Активиране на конструкторите и деструкторите на предшествениците


Наследяване в С++. Единично публично наследяване

  • В С++ е реализирано, както единично така и множествено наследяване като се допуска наследяване както полета, така и на методи (в тази лекция ще раз-глеждаме само единично наследяване)
  • Синтаксис:

Class <име_на_клас>: <списък_класове_предшественици>

{ private: // частна секция

<декларации на променливи и функции>;

public: // публична секция

<декларации на променливи и функции>;

protected: //секция с ограничен достъп

<декларации на променливи и функции>;

};

–        пред името на всеки предшественик може да има атрибутът за достъп (private, public, protected) и ключовата дума virtual

–        ако е пропуснат атрибута за достъп се подразбира private

–        ако  в <списък_класове_предшественици> има само едно име на клас, то е зададено единично наследяване

Семантика:

–        Наследникът наследява всички полета и обикновените методи на предшественика (макар че някои от тях може да не са достъпни в наследяващия клас)

–        Структурата на наследника се състои от 2 вложени блока, като блокът на наследника е вложен в този на предшественика

–        Атрибутът за достъп определя какъв е достъпът до наследените членове (на този етап ще считаме, че е public !!!)

–        Публично наследяване: Форма на наследяване, при която производният клас наследява характеристиките на своя предшественик(ци) по такъв начин, че тези характеристики запазват правата си за достъп, такива каквито те са били в предшественика

–        Производният клас не наследява:

  • конструктори
  • деструктори
  • приятелски функции
  • статични членове-данни и членове-функции
  • предефинирани операции за присвояване и new

Описание на методите на класовете-наследници

–        подчинява се на общите правила за описание на методи

–        при описание на методите на клас-наследник са достъпни всички негови характеристики и характеристиките на всички негови предшественици, които не са частни (private)

–        достъп до предефиниран член (в този случай важи правилото за област на действие на имената в MS Visual С++):

  • достъп до версията на предефинирания член от самия наследник – просто се указва неговото име
  • достъп до версията на предефинирания член от някой негов предшественик – използва се синтаксисът за уточнено име (операцията за област на действие)

Задача: Какъв ще бъде резултатът от изпълнение на метода Print за екземпляр на класа Contact, ако той е описан по следния начин:

void Contact:: Print(void)

{Print();

cout << myAddress << endl;

}

Наследяване на полета и методи при публично наследяване (виж горния пример)

  • При наследяване на полетата може да се изразят:
    • чисто наследяване
    • скриване – класът Contact няма достъп до полето myName на своя предшественик Name
    • добавяне – класът Contact добавя полето myAddress към структурата наследена от предшественика си Name
    • предефиниране
  • При наследяване на методи е възможно:
    • чисто наследяванеContact наследява метода SetName() от своя предшественик
    • добавянеContact добавя метода SetAddress() към функционалността наследена от предшественик
    • предефиниране на методиContact предефинира метода Print(), с което се променя наследеното от предшественика поведение за извеждане на екрана
    • скриване

Обработка на екземпляри: Активиране на конструктора на предшественика

  • Правило: Активирането на конструктора на предшественика се извършва като в дефиницията на конструктора на наследника се включи т.н. инициализиращ списък. Използва се следният синтаксис:

<заглавие на конструктора> : <инициализиращ_списък>

{ <тяло_на_конструктора>}

  • Синтаксис на <инициализиращ_списък>: Изброяване на извиквания на конструкторите на някои от основните класове. В случай на единично наследяване инициализиращия списък съдържа извикване на конструктора на единствения базов клас:

<име_на_базов_клас> (<списък_изрази>)

–        <списък_изрази> задава фактическите параметри за активиране на конструктора на базовия клас

–        фактическите параметри за активиране на конструктора на базовия клас обикновено са параметри от списъка с формални параметри на конструктора на наследника

Обработка на екземпляри: Унищожаване на обекти-наследници. Активиране на деструктора на предшественика

При унищожаване на автоматични обекти-наследници (при излизане от областта на действие на обекта) настъпват следните действия:

  • Деструкторите се извикват по ред, обратен на този на активиране на конструкторите

–        най-напред за обекта се извиква деструктора на наследника

–        след това се активира(т) деструктора(ите) на предшествениците

  • Накрая се освобождава цялата памет заета от обекта

Подобни статии

  • Обработка на иключенията в MS Visual C++ – try-блок, throw-блок, catch-блок
    Определение: Изключителна ситуация (накр. изключение) представлява неочаквано или не толкова често срещано събитие възникнало по време на изпълнение на дадена програма Примери: недостиг на памет, деление на нула, прекъснат кабел (при мрежови конфигурациии) и др. общ...
  • Програмиране на алгоритми за обработка на масив
    Масивът е вътрешна, статична структура от еднотипни данни, последователно разположени в паметта и притежаващи общо име. Всяка отделна данна се нарича елемент на масива и се характеризира с име, тип на масива (базов тип) и индекс. Името на масива е аналогично на име на променлива...
  • Метрики в софтуерното инжинерство
    Какво включват разходите за софтуерното инженерство? Измерване в софтуерното производство Какво е софтуерна метрика? Класификация на софтуерните метрики Примери за софтуерни метрики Проблеми на използването на софтуерните метрики Какво включват разходите за софтуе...
  • Оператори за цикъл във Visual Basic
    Цикли. Предназначение и приложение. Видове Цикълът представлява група повтарящи се действия, които се изпълняват за различни стойности на участващите в тях величини. Всеки цикъл би могъл да се разгледа като съставен от четири основни части: Инициализация – в нея задаваме н...
  • Хибридни програмни среди
    Програмните среди, основаващи се на няколко модела, позволяват на напредналите програмисти да експериментират с различни нови архитектури за решаване на задачи, като избират различни софтуерни модули. Поради липсата на универсален език за представяне на знания, който да е подходя...
Публикувано в Програмиране с етикети , , , , , . Постоянна връзка.

Коментарите са забранени.