Felülírva az alapvető műveleteket

B VAR3 (var1); // B (A)

C var4 (VAR3); // C (B)

C var5 (var1); // C (B (A))

C var6 (5.6); // Hiba! Értelemszerűen az úgynevezett C (B (A (dupla)))

C var7 (A (5.6)); // C (B (A))

Hiba létrehozásakor var6 változó összefügg azzal, hogy szükség van a két-szintű, nem szabványos implicit konverzió felhívásával konstruktőrök: dupla hogy A, akkor A és B

Amikor létrehoz egy változót var7 egyik ilyen átalakulások - kettős A - explicit, és most minden rendben lesz.

Tehát egy kivitelező egyetlen érv Class :: Class (típus) mindig meghatározza a típusú átalakítás, hogy írja Class típusú, nem csak egy módja annak, hogy hozzon létre egy objektumot, amely kifejezett utalás.

Konvertálásához egy absztrakt típus egy szabványos vagy az absztrakt absztrakt C ++ ott szer - a funkció, amely végrehajtja a típus átalakító, vagy üzemeltető-típusú átalakítás.

Class :: operátor típusa (void);

üzemeltető kettős () // konvertálása

// absztrakt típus, hogy a standard> .;

kettős d1 = kettős (i); // Explicit típusú konverziós int a kettős;

kettős d2 = i; // int implicit konverzió kettős;

kettős d3 = kettős (xv); // explicit konverzió X típusú kettős;

kettős d4 = xv; // implicit konverziója X megkétszereződik.

// konvertálása egy absztrakt típus az elvont.

char * str1; // Strings str1 és str2 áruház szimbólum

char * str2; // képviselete egészek.

Y (char * s1, char * s2): str1 (s1), str2 (S2)<>

Y yvar ( "12" "- 25");

Amikor létrehoz egy változót xvar a hívás előtt X :: X (X) másolata kivitelező végeznek implicit konverziós értéket egy változó típusú yvar X. Ugyanez átalakulás kifejezetten a következőképpen nézhet ki:

X xvar = X ( "12", "-25");

fordítóprogram panaszkodni „nem talált a kivitelező a megadott paraméter” hibaüzenet. A tény az, hogy ellentétben a tervező, üzemeltető típusú konverziók nem tud létrehozni egy objektumot az absztrakt típus. Ez képes átalakítani csak az érték már létrehozott objektum az egyik típus az értékét egy másik típusú. Az utóbbi példában, az Y-típusú tárgy még nem létezik.

család osztály sablon határozza meg egy eljárást az egyes osztályok, mint ahogy osztály határozza meg a szabályokat az építési és elrendezése egyes objektumokat. osztály családi minta meghatározása a következő:

sablon <список параметров шаблона> osztály definíciója

Az osztály definíciójában szerepel a sablon, a különleges szerepet játszott az osztály nevét. Ez nem a neve egy adott osztály, és a család nevét paraméterezett osztályok.

Definíció sablon csak globális.

Tekintsük a vektor osztály, amely tartalmazza egy egydimenziós tömb adatokat. Függetlenül attól, hogy milyen típusú a tömb elemeinek egy osztályban kell meghatározni ugyanazon alapvető műveletek, mint például a hozzáférés az index elem és hasonlók Ha vektor típusától meghatározott elemeket, mint egy osztály sablon paraméter, a rendszer generál a kívánt vektor típusától és a megfelelő osztály definíció az egyes adott objektumot.

sablon // T sablon paraméterei;

T * pv; // egydimenziós tömb;

int mérete; // a tömb méretét.

Kapcsolódó cikkek