Mik virtuális függvények, programozás C és C

Mint korábban említettük, a virtuális kombináltan működik származtatott típusok lehetővé nyelv C ++ futási támogatás polimorfizmus. Ez a polimorfizmus minden feleségei az objektum-orientált programozás, mert lehetővé teszi a OVERRIDE-lyat alap osztály működését a leszármazott osztályok, annak érdekében, hogy saját verzióját kapcsolatban az adott osztályban. Így az alap osztály meghatároz egy közös felületet, koto-nek mind származik az óráit, és ezzel lehetővé teszi, hogy a polimorfizmus származtatott osztályok saját végrehajtási módszereket. Emiatt polimorfizmus gyakran úgy definiálják hasadó kifejezés „egy felületen - egy sor módszereket.”

Sikeres alkalmazása polimorfizmus társított a feltétellel, hogy alapozzák és az azokból származó osztályok képeznek hierarchiát, amelyben az átmenet a bázist a származtatott osztály felel újra-go a magas vagy alacsony általánosság. Ezért, amikor helyesen használják, az alap osztály biztosították biztosítja, hogy minden elem a származtatott osztályokban közvetlenül felhasználható, valamint egy sor funkciót, amely a származtatott osztályokban kell végrehajtaniuk felülírják őket.

A közös felület és annak több megvalósítása fontos, mivel ez segít programozó fejlesztése kifinomult alkalmazások. Például, hozzáférést biztosít az összes tárgyak egy származéka az alap osztály, hajtjuk végre azonos módon, akkor is, ha a tényleges működését ezek a tárgyak különböző az átmenet az egyik osztály egy másik származékot. Ez azt jelenti, hogy meg kell emlékezni csak egy felület, és nem-sokat. Továbbá, a távolságot a felület és a végrehajtás lehetővé teszi, hogy hozzon létre egy könyvtárat class-baglyok által a független fejlesztők. Ha ezek a könyvtárak helyesen hajtják végre,
adnak egy közös felületet, és tudod használni őket megjeleníteni a saját konkrét osztályok.

Ahhoz, hogy megértsük a hatalom az ötlet „egy felület - egy sor módszerek”, hogy ezt a vezető rövid program. Ez létrehoz egy alap osztály alakja. Ez az osztály tárolásához használt betétek különböző méretű kétdimenziós objektumok és számítani a területen. set_dim () függvény egy szabványos tag függvény, mert a tevékenységek közös minden pro-víz osztályok. Azonban show_area () függvény egy virtuális függvény nyilvánították kiszámításának módszerét területén minden objektum hogy egyedi. A program az alak osztály kimenete két külön osztályok négyzet és a háromszög.

#include
osztály alakja védett:
double x, y;
nyilvános:
void set_dim (dupla i, kettős J) x = i;
y = j;
>
virtuális void show_area () cout <<"No area computation defined ";
cout <<"for this class. \n";
>
>;
osztály háromszög: közéleti nyilvánosság:
void show_area () cout <<"Triangle with height ";
cout < cout <<" has an area of ";
cout <>
>;
osztály tér: közéleti nyilvánosság:
void show_area () cout <<"Square with dimensions ";
cout < cout <<" has an area of ";
cout <>
>;
int main ()
ábra * p; / * Létrehozása mutató alaptípus * /
háromszög t; / * Új tárgyak elkészített típusokat * /
négyzet s;
p = t;
p-> set_dim (10,0, 5,0);
p-> show_area ();
p = s;
p-> set_dim (10,0, 5,0);
p-> show_area ();
vissza 0;
>

osztály kör: közéleti nyilvánosság:
void show_area () cout <<"Circle with radius ";
cout < cout <<"has an area of ";
cout <<3.14 * x * x;
>
>;

Mielőtt a kör osztály, nézd meg alaposan a meghatározása show_area () függvényt. Megjegyzendő, hogy a rendszer csak az x értékét, amely kifejezi a-us. Mint ismeretes, a terület egy kör képlettel számítjuk ki π R 2. Azonban, a funkció set_dim (), ábrán meghatározott osztva osztályú megköveteli nem egy, hanem két érv. Mivel az osztály körben nem kell etsya második érték, akkor hogyan lehetünk ebben a helyzetben?

Kétféle módon lehet megoldani ezt a problémát. Az első az, hogy okozhat set_dim (), használva a második paraméter dummy paraméter, amely nem cisz-USE. A hátránya ennek a megközelítésnek az, hogy meg kell emlékezni ilyen kivételes esetben, hogy alapvetően sérti az „egy felületen - egy sor módszereket.”

A legjobb megoldás erre a problémára használatával jár a paraméter y set_dim () értékkel-Niemi alapértelmezett. Ebben az esetben a hívás set_dim () a kör sugara kell adnia csak. Amikor hívja set_dim () azt jelzi, a két érték a háromszög vagy téglalap. Az alábbiakban bemutatjuk a programot, amely megvalósítja ezt a megközelítést:

#include
osztály alakja védett:
double x, y;
nyilvános:
void set_dim (dupla i, kettős J = 0) X = i;
y = j;
>
virtuális void show_area () cout <<"No area computation defined ";
cout <<"for this class .\n";
>
>;
osztály háromszög: közéleti nyilvánosság:
void show_area () cout <<"Triangle with height ";
cout < cout <<" has an area of ";
cout <>
>;
osztály tér: közéleti nyilvánosság:
void show_area () cout <<"Square with dimensions ";
cout < cout <<" has an area of ";
cout <>
>;
osztály kör: közéleti nyilvánosság:
void show_area () cout <<"Circle with radius ";
cout < cout < cout <<3.14 * x * x;
>
>;
int main ()
ábra * p; / * Létrehozása mutató alaptípus * /
háromszög t; / * Új tárgyak elkészített típusokat * /
négyzet s;
egy kört;
p = T;
p-> set_dim (10,0, 5,0);
p-> show_area ();
p = s;
p-> set_dim (10,0, 5,0);
p-> show_area ();
p = c;
p-> set_dim (9 0.);
p-> show_area ();
vissza 0;
>

Ez a példa is mutatja, hogy amikor meghatározzák az alap osztály fontos, hogy a maximális, de lehetséges a rugalmasság. Nem szabad ró szükségtelen korlátozást programot.

Kapcsolódó cikkek