Kezdőoldal » Számítástechnika » Programozás » C++ kérdés, van olyan, aki...

C++ kérdés, van olyan, aki tudja miért így "kell"?

Figyelt kérdés

Iskolában tanították így, de magyarázatot nem kaptam, hogy miért így kell. Szóval:


egy osztály definiálásánál


class A{

private:

....


public:

A();

A(...);

....

};


A::A(){...} stb.


Azt nem értem, hogy miért az osztályon kívül kell leírni a metódus műkködését, miért nem az osztályon belül?



Illetve a másik amit nem értek az az, hogy 2 db külön file-ba kell tenni ezeket, az osztálydeklarációt egy xyz.hpp file-ba, s a működését egy xyz.cpp fileba. Miért nem egy db header file-ba rakjuk?


2016. dec. 4. 13:10
 1/5 anonim ***** válasza:
55%
Pontosan azért kell külön leírni, hogy másik fájlba lehessen tenni. És azért jó másik fájlba tenni, mert ha van egy zárt forrású osztályod, amit jó pénzért eladsz valakinek, akkor csak a header fájlt adod vele, amit a programjába beépít, a tényleges kódot pedig nem, azt csak binárisan kapja meg, pl. egy dll/so fájlban.
2016. dec. 4. 13:43
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
Köszönöm így már teljesen értem!
2016. dec. 4. 13:48
 3/5 uno20001 ***** válasza:

Nem feltétlenül kell így csinálni, teheted az osztályba is a metódusok definícióját, azonban általában okosabb döntés különszedni a metódus deklarációját és definícióját.


Ha a header fájlokban lenne a definíció, s több cpp állományba is includeolnád azt a bizonyos header fájlt, akkor a linker panaszkodna, hogy több szimbólum is létezik ugyanazzal névvel.

2016. dec. 4. 16:00
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

"a linker panaszkodna, hogy több szimbólum is létezik ugyanazzal névvel"


Biztos ez?

2016. dec. 4. 18:27
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Tegyük fel, hogy van egy class A osztályod, amit más fordítási egységekben is használni szeretnél. Ezekben meg kell jelennie a deklarációjának, hogy a fordító ismerje a hívási szekvenciákat, stb., de kódot nem fordít belőle, hiszen akkor ahány fordítási egységben használnád, mindenütt megjelenne a konkrét kódja is. Ezért a header fájlba érdemes csak deklarációkat tenni, és külön leírni a hozzá tartozó implementációt, hogy csak egyszer (szeparáltan) létezzen a lefordított kódja. Így a tárgykódban nem fog feleslegesen megjelenni a kód, csak a linker fogja feloldani a hivatkozásokat a külön lévő tárgykód felé.


Na ezt most elég katyvaszosan írtam le, de a lényeg, hogy nagyobb projektek esetén mindenképpen érdemes külön tenni a metódusok kódját. Kis példaprogramokban nincs akkora jelentősége.

2016. dec. 4. 22:38
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!