Изграждане на класова йерархия е основен механизъм за намаляване сложността на класовете и постигане на полиморфично поведение на обектите


Категория на документа: Информатика


Чисто виртуална функция или чист виртуален метод е виртуална функция, която се изисква да бъдат приложени от производна клас, ако този клас не е абстрактен. Класове, съдържащи чисти виртуални методи се наричат ​​"абстрактно", те не може да бъде приспособен, директно. Подклас на абстрактен клас може да бъде приспособен, само директно, ако всички наследени чисто виртуални методи са били реализирани от този клас или клас-майка. Чисти виртуални методи обикновено иматдекларация (подпис) и няма определение (изпълнение).
Като пример, абстрактен клас база MathSymbol могат да предвидят чисто виртуална функция doOperation() и производни класове Plus и Minus приспособления doOperation() да предостави конкретни реализации. Прилагане doOperation()няма да има смисъл в MathSymbol клас, както MathSymbol е абстрактно понятие, чието поведение се определя единствено за всеки вид (подклас) на MathSymbol . По същия начин, даден подклас на MathSymbol не би била пълна без изпълнението наdoOperation() .
Въпреки че чисто виртуални методи обикновено имат изпълнение в класа, които ги декларира чисто виртуални методи в C + + е разрешено да съдържа изпълнение в декларират своята класа, осигуряване на резервно или поведението по подразбиране, че може да делегира производна клас, ако е уместно.
Чисто виртуални функции се използва, когато методът декларации се използва за определяне на един интерфейс , за които производни класове ще предоставят всички реализации. Абстрактен клас, който служи като интерфейс съдържа само чисто виртуални функции, и няма данни членове или обикновени методи. Използване на чисто абстрактни класове, интерфейси, работи в C + +, тъй като поддържа множествено наследяване . Тъй като много езици OO не поддържа множествено наследяване те често предоставят отделен механизъм интерфейс. Това се вижда в Java например.
В чисто виртуална функция декларация предоставя само прототип на метода. Въпреки че изпълнението на чисто виртуална функция обикновено не е предвидено в абстрактен клас, тя може да бъде включен, въпреки че определението не могат да бъдат включени в точката на декларацията. Всеки не-абстрактен клас на дете все още се изисква, за да отмените метод, но прилагане, предвидени от абстрактен клас може да се нарече по този начин:
анулира Резюме :: pure_virtual () {

/ / Направи нещо

}

клас Дете: публично Резюме {

виртуален за невалидни pure_virtual () / / вече не абстрактен, този клас може да бъде

/ / Инстанция.

};

невалидни детето :: pure_virtual () {

Резюме :: pure_virtual (); / / изпълнението на абстрактен клас

/ / Се изпълнява





Сподели линка с приятел:





Яндекс.Метрика
Изграждане на класова йерархия е основен механизъм за намаляване сложността на класовете и постигане на полиморфично поведение на обектите 9 out of 10 based on 2 ratings. 2 user reviews.