Kezdőoldal » Számítástechnika » Programozás » Ha külön fájlt szeretnék...

Ha külön fájlt szeretnék minden egyes classhoz, akkor a class sourcet hova írjam?

Figyelt kérdés
Helló, szeretnék minden egyes classt más fájlba tárolni, átláthatóság szempontjából. A classban levő függvényeket, változókat a .h vagy .cpp fájlba írjam? Mi a különbség a 2 közt? Ha mondjuk van 2 C++ fájlom, és 2 függvény van, egyik az egyik fájlban, másik a másik fájlban, akkor hogy lehet meghívni az egyiket a másikból? Kérlek kommentárokat rakjatok a programkódba, ha esetleg példaként küldenétek egyet. (C++)

2018. febr. 20. 09:22
 1/2 anonim ***** válasza:
92%

"A classban levő függvényeket, változókat a .h vagy .cpp fájlba írjam? Mi a különbség a 2 közt?"


Általánosságban a .h a deklarációk helye, a .c a definíciók ill. implementáció helye. Követendő irányelv, hogy a header (.h) fájlokba nem teszünk semmi olyat, ami akár csak egy bájtnyi konkrét kóddá is fordulna. Ugyanis ha azt beemeled egy rakás más .c fájlba, akkor a fordító mindben legenerálja ugyanazt a kódot, és épp ezt kerüljük el a különböző fordítási egységekkel.


Pl.

// test.h:

int add(int a, int b);

// Ez egy függvény deklaráció, csak a fordítónak szól, hogy ahova be-include-olod, ott bele tudja fordítani a kódba az add() függvényre vonatkozó hívási szekvenciát, magyarul képes legyen meghívni a függvényt. Ott a fordítót nem fogja érdekelni, hogy a függvény mit csinál, azt megoldja a függvény saját fordítási egységében.


// test.c:

#include "test.h"

// ...itt már akár hívható az add()

int add(int a, int b) {return a+b;}

// Ez a függvény implementálása, vagyis megadjuk a függvény kódját is, ami majd lefut, ha meghívjuk. Ez már konkrét utasítás sorozattá fordul, és jó esetben csak egy tárgykódban fog szerepelni, vagyis a kész futtatható kódban is csak egyszer.


Osztályok hasonlóképpen:

// test2.h

class TestClass {

int i;

public:

TestClass(int param);

};


// test2.c

#include "test2.h"

TestClass::TestClass(int param) {i=param;}

// Itt adjuk meg, hogy a valódi kód miből áll. Minden más adatszerkezetekre, prototípusokra, stb. vonatkozó infó a header-ben van.

2018. febr. 20. 11:21
Hasznos számodra ez a válasz?
 2/2 sharkxxx ***** válasza:
88%

// ***** egyik.h *****

#ifndef _EGYIK_H_INCLUDED // Ne lehessen többször include-olni az egyik.h fájlt.

#define _EGYIK_H_INCLUDED

// Az egyik.cpp fájlból annak a fuggvenynek a prototipusa,

// amelyet más .cpp fájlból is megszeretnél hívni.

void egyik_nyilvanos_fuggveny();

#endif // _EGYIK_H_INCLUDED


// ***** egyik.cpp *****

#include <iostream>

#include "masik.h" // Elérhetõ legyen az összes masik.h-ban deklarált függveny.

#include "egyik.h" // Párosítjuk az egyik.cpp forráskód fájlt az egyik.h fejléc fájlal.

void egyik_nyilvanos_fuggveny() {

    std::cout<<"A masik_nyilvanos_fuggveny() cime: ";

    std::cout<<(void*)masik_nyilvanos_fuggveny<<"\n"; // A masik.cpp fájlban van definiálva.

    std::cout<<"Hello, egyik!\n";

}


// ***** masik.h *****

#ifndef _MASIK_H_INCLUDED // Ne lehessen többször include-olni a masik.h fájlt.

#define _MASIK_H_INCLUDED

// A masik.cpp fájlból annak a fuggvenynek a prototipusa,

// amelyet más .cpp fájlból is megszeretnél hívni.

void masik_nyilvanos_fuggveny();

#endif // _MASIK_H_INCLUDED


// ***** masik.cpp *****

#include <iostream>

#include "egyik.h" // Elérhetõ legyen az összes egyik.h-ban deklarált függveny.

#include "masik.h" // Párosítjuk a masik.cpp forráskód fájlt az masik.h fejléc fájlal.

void masik_nyilvanos_fuggveny() {

    egyik_nyilvanos_fuggveny(); // Az egyik.cpp fájlban van definiálva.

    std::cout<<"Hello, masik!\n";

}


// ***** main.cpp *****

#include "masik.h" // Elérhetõ legyen az összes masik.h-ban deklarált függveny.

int main() {

    masik_nyilvanos_fuggveny();  // A masik.cpp fájlban van definiálva.

    return 0;

}

2018. febr. 20. 12:00
Hasznos számodra ez a válasz?

Kapcsolódó 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!