Всего на сайте:
236 тыс. 713 статей

Главная | Механика

Virtual int GetValue();  Просмотрен 291

Тоді за межами формального опису

int Value::GetValue(){return value;}

Однак чи потрібне ключове слово virtual при оголошенні функції в усіх членах поліморфічного кластера? Виявляється, що достатньо його наявності лише в першому члені поліморфічного кластера, перед віртуальною функцією найвищого рівня.

Розглянемо приклад використання віртуальних функцій. Нехай потрібно написати програму виведення на екран різних геометричних фігур. Причому проблема полягає в тому, що ми взагалі не знаємо на даному етапі, скільки фігур буде, як їх будувати. Однак усі фігури мають спільну властивість – вони геометричні. Використаємо цей факт, написавши деякий клас Form:

class Form {

public:virtual void Draw() { };};

Далі можемо визначити масив покажчиків на Form:

Form*picture[100];

Для побудови конкретної фігури визначатимемо класи, похідні від Form, які містять віртуальні функції Draw(). За такого підходу main()-функцію можемо написати одразу, не чекаючи опису конкретних класів з функціями, що створюють фігури:

Main()

{int i=0;

while(i<100&& picture[i]!=0)

{picture[i]->Draw();i+=1}}

Основну програму складено. Тепер можемо писати похідні класи:

class Circle:public Form

{public:virtual void Draw(){//тіло}};

class Line:public Form

{public:virtual void Draw(){//тіло}};

Виділяємо пам'ять:

picture[0]=new Line;

picture[1]=new Line;

picture[2]=new Circle;

Програма готова.

7.10.2. Чисті віртуальні функції. Абстрактні класи

 

Чиста вiртуальна функцiя-член – це прототип функції, для якої не потріб­не визначення в протоколі класу. Синтаксично чиста віртуальна фун­кція задається так:

virtual<тип><iм'я>(сигнатура)=0;

Клас, який мiстить чисті вiртуальнi функцiї, називається абстрактним. Наприклад:

class AbstractClass {

public:

Предыдущая статья:Int main(void). {C c; с.A::func(); с.B::func(); с.data=10; return 0;} Можна описа.. Следующая статья:Virtual void f1(void);. virtual void f2(void)=0;//...}; Специфіка абстрактного класу полягає ..
page speed (0.3596 sec, direct)