C Fejlesztési osztályok és öröklés
Minden, amit az előző oktatóanyagokban megismert, természetesen már a C ++ programozási nyelv része volt. Ennek ellenére a C ++ program fejlesztése általában másképp néz ki, mint amit eddig a példákban láttál.

Eddig a C ++ alapszókincsének nagy részét megismerte és kezdetleges módon alkalmazta. A gyakorlatban a C ++ programok általában elsősorban osztályokból állnak. A fejlesztők az osztályok létrehozására összpontosítanak, amelyek az adott feladat sajátos igényeihez igazodnak. Az osztályok létrehozása után adattípusként használják őket a változók meghatározásához. Ezeket a változókat objektumoknak nevezzük, és ezután egy programban felhasználják.
Miután létrehoztunk egy új, üres projektet a main.cpp-vel, mint mindig, létrehozunk egy osztály nevű fejlécfájlt.
Az osztály csak a fejlécfájlban van deklarálva. A fordító tehát tudja, hogy később lesz versenyautóknak nevezett osztály. A public kulcsszó azt jelenti, hogy az alábbiak kívülről elérhetők. A privát viszont azt jelenti, hogy az alábbi kódot csak magában az osztályban lehet meghívni. Még mindig védett, de csak az öröklésben játszik szerepet. Maga az osztály számára a védett egyenértékű a privátéval. A példában a kmh egész változót definiáljuk. Kívülről kell olvasni getter módszerrel (int sebesség (érvénytelen);). A módszerek rennwagen (); és versenyautó (int kmh); az osztály 2 konstruktora. Itt a konstruktort túlterhelték, mint a funkciókat. Az osztály példányaitól függően a fordító eldönti, hogy a kettő közül melyiket kell meghívni. A kivitelező versenyautó (int kmh); nemcsak elindítja a szekeret, hanem közvetlenül lenyomja a pedált és 200 km/h-ra gyorsul. A romboló
versenyautó(); akkor hívódik meg, ha a példány törléssel megsemmisül, vagy a program leáll. A módszerekkel a void accelerate (int kmh);, void brake (void); és int sebesség (érvénytelen); ugyanazok a szabályok érvényesek, mint a normál funkciókra. Ezután hozzuk létre a klasse.cpp fájlt a Forrásfájlok alatt. Itt jön be maga az osztály kódja.
Először meghatározzuk a rennwagen: rennwagen () <> konstruktort. Mivel mindig visszaküld egy objektumot (nevezetesen magát), nem kerül adattípus elé. A konstruktorban a belső kmh változót ennek kulcsszóval címezzük, és 0-ra állítjuk. Ez mindig a saját osztályának mutatója, és a változók és módszerek az osztályon belül elérhetők. Szöveg is megjelenik a konzolon.
Ezután meghatározzuk az osztályrombolót. Felismerheti onnan, hogy pontosan ugyanaz a neve, mint a konstruktor, a különbség az, hogy az egy tilde
elöl áll. Csak akkor kell jelen lennie, ha a fejléc deklarációban is szerepel. A destruktor elé nem kerül adattípus. Ebben az esetben a kmh változó 0-ra van állítva.
A többi módszernek magától értetődőnek kell lennie, a funkciókra vonatkozó szabályok szerint.
Ezután adaptálnunk kell a main.cpp fájlt.
Fontos, hogy a klasse.h fejlécfájl szerepeljen benne. Ha ezt elfelejtik, a fordító nem találja a fájlban deklarált osztályt. Az osztály példányosításakor most 2 konstruktor áll rendelkezésünkre. A példában a konstruktort rennwagen () hívták meg. Ezzel csak elindul a szekér. A másik konstruktor viszont úgy tűnik, hogy "futásban van", mivel beindítja a motort, és közvetlenül 199 km/h-ra gyorsítja. Az osztály példányosítása után a Bmw változóban szerepel egy versenyautó-osztály tárgya. Az osztályváltozók (az úgynevezett tulajdonságok) és a módszerek már elérhetők a Bmw-n keresztül, amelyet egy periódus követ (amennyiben a változókat vagy módszereket nyilvánosként definiálják). A Bmw.kmh nem engedélyezett az osztályon kívül, mivel azt privátnak nyilvánították.
Természetesen mutató is használható.
Osztályos öröklés
Az osztály módszerek és változók (tulajdonságok) átvihetők (öröklődhetnek) más osztályokba. A fenti példában az osztály versenyautója jött létre. Ide tartoznak olyan módszerek, mint a gyorsulás (), a fékezés () és a sebesség (). Elvileg ezek a módszerek minden autóhoz illeszkednek, ezért az osztály egyfajta alaposztályként használható.
A következő példában létrehozunk egy új osztályú caprio-t, amely örökli a rennwagen módszereit, és amely maga is rendelkezik egy kis speciális felszereléssel.
A következő példa bemutatja ennek működését. De először létre kell hozni egy vererbung.h nevű fejlécfájlt és egy új forrásfájlt (vererbung.cpp).
Az osztály caprio-t osztály caprio-val deklarálják. A : nyilvános versenyautó azt jelenti, hogy a caprio osztály minden módszert és változót (tulajdonságot) örököl a versenyautó osztálytól. Az előfeltétel természetesen az, hogy a versenyautókban alkalmazott és a caprio-ban használható módszerek és változók (tulajdonságok) nyilvánosak vagy védettek legyenek. Magában a caprio osztályban deklaráljuk a 2 konstruktort és a method verdeck () -t egy cpp fájlban.
A konstruktor caprio (int kmh) érdekes. Korábban a versenyautók osztályában a normál konstruktort is túlterheltük versenyautókkal (int kmh). Tehát előnyös lenne, ha a túlterhelt caprio (int kmh) konstruktort úgy hívnánk meg, hogy akkor ne a standard szülő konstruktort, hanem a szülőt (int kmh) terheljük. Ahhoz, hogy valami ilyesmi lehetséges legyen, a megfelelő konstruktort meg kell adni a fejlécfájlban: caprio (int kmh): versenyautó (kmh)
A meghívandó szülőosztály konstruktorát, beleértve a szükséges paramétereket, egyszerűen meg kell jegyezni a kettőspont után és a függvénytest előtt.
A vererbung.cpp fájlban csak a verdeck () metódus van megadva, különben csak konstruktoraink vannak, és ezek már definiálva vannak.
Mivel most új osztályunk van, természetesen meg kell változtatnunk a main.cpp kódját is.
Az új osztály példányosításakor mindig a versenyautók szülőszerkesztőjét hajtják végre először, mivel a caprio osztály származik belőle. Ekkor meghívják a caprio konstruktort, ami viszont a metdont hívja meg verdeck ().
Láncolt módszer hívása
Ez a kulcsszó az osztály saját mutatója. Ez a mutató visszatérési típusként is meghatározható. Ez azt jelenti, hogy a módszerek közvetlenül összekapcsolhatónak nevezhetők. Itt van egy önálló példa, amelynek semmi köze az oldal többi részéhez:
Az & rCall (); osztály definícióval a saját objektum visszakerül. Ha egy metódus visszaküldi a saját objektumát, akkor egy másik metódus közvetlenül elérhető az alkatrészválasztó operátoron keresztül (ebben az esetben az időszak.). A módszereket azonban nyilvánosként kell meghatározni.
A * pCall () definíciós osztállyal; a saját tárgyat is visszaküldik, de mutatóként. Egy másik módszer is közvetlenül elérhető az alkatrészválasztó operátoron keresztül (ebben az esetben a kötőjel nyíl ->). A módszereknek szintén újra nyilvánosaknak kell lenniük. Személy szerint szerintem a -> változat szebb, mert előtte 10 éve fejlesztettem a PHP-t.:)