Помогни ни да направим Uroci.net по - богат! Добави урок

C++ част.8 (Обектно-ориентирано)

C++ » C++
fix3d   трудност:    видян: 26436


Глава 8: Обектно-ориентирано програмиране

Съдържание на осма глава :

8.1. Презаредими функции с аргумент клас
8.2. Виртуални функции
8.3 Виртуални базови класове


Обектно ориентираното програмиране се характеризира с онаследяване и динамично свързване. С++ поддържа онаследяването чрез извличане на класове - това беше темата на предишната глава. Динамичното свързване се осъществява чрез виртуалните функции на клас.

Йерархията на онаследяване дефинира отношения тип подтип между типовете класове. Например, Panda е тип Bear, на свой ред Bear е тип ZooAnimal. По същия начин и сортираният масив, и масив с проверка на ранга са типове IntArray. Виртуалните функции дефинират типово зависими операции в йерархията на онаследяването - например, функцията draw() на ZooAnimal или subscript оператора на класа масив. Виртуалните функции осигуряват метод за капсулиране на детайли по реализацията на йерархията на онаследяването от програмите, които ги използват. В тази глава ще разгледаме подробно виртуалните функции. Ще разгледаме също един специален случай на онаследяване на класове - този на виртуалния (или още споделен) базов клас. В началото обаче ще преразгледаме презаредимостта на име на функция с аргумент от тип клас.



8.1. Презаредими функции с аргумент клас

Често една функция се прави презаредима за да се осигури образец на съществуваща функция за работа с обекти класове. Например, ако трябва да се дефинира клас комплексно число, проектантът трябва след това да дефинира образец на библиотечната функция за извличане на квадратен корен, която оперира с обекти от класа Complex:

extern Complex& sqrt( Complex& );

Първоначалното разглеждане на презаредими функции. Това е предмет на обсъждане на тази глава.

Сега ще разгледаме точното съпоставяне на аргумент от тип клас, съпоставянето чрез стандартни преобразования и съпоставянето чрез извикване на дефиниран от потребителя оператор за преобразуване.

Точно съпоставяне

Обект от клас се съпоставя точно само с формален аргумент от неговия тип клас. Например,

ff( Bear& );
ff( Panda& );
Panda yingYang;// exact match : ff( Panda& )
ff( yinYang );

По подобен начин указател към обект от клас се съпоставя точно само с формален аргумент указател към същия тип клас. Алгоритъмът за съпоставяне на аргументи не може да прави разлика между обект и псевдоним от тип клас. Макар че следващите два образеца декларират две различни функции, реалното обръщение е двузначно и предизвиква грешка по време на компилация.

// warning : cannot be distinguished// by the argument matching algorithm ff( Panda );

ff( Panda& );// ok : ff( Panda& )
int (*pf)( Panda& ) = ff;
ff( yinYang ); // error : ambiguous
pf( yinYang ); // ok


Страници: 1 2 3 4 »

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com