Advertentie:

Auteur Topic: [tut] eigen headers maken  (gelezen 1067 keer)

Offline dirkwillem

  • Actief lid
  • ****
  • Berichten: 236
  • Grappig, dit is net een tweede signature!
    • De site van DirkWillem
Re: [tut] eigen headers maken
« Reactie #15 Gepost op: januari 12, 2012, 16:26:38 pm »
heb er nu helaas even geen tijd voor :(
Stop censuur!

Online jonas

  • Ervaren lid
  • ******
  • Berichten: 726
Re: [tut] eigen headers maken
« Reactie #16 Gepost op: januari 16, 2012, 18:10:04 pm »
Ik heb een vraag ivm met die headers maken:
 
Ik werkte tot nog toe de hele tijd met classes in het main.cpp bestand, maar als ik dit nu wil gaan opsplitsen in meerdere headers, hoef ik dan ook -net zoals in het main.cpp bestand- alles includen wat ik nodig heb in de header, of doe ik dit in het *.cpp bestand? Of moet ik het doen in het *.cpp én in het *.h bestand? Even een voorbeeld:

- Ik heb een class, genaamd app.h, in één van de functies die hierin staan, heb ik een string nodig. Om een string te kunnen gebruiken, gebruik ik normaal gezien #include <string> in het main.cpp bestand. Maar moet ik nu bij én app.h én bij app.cpp #include <string> schrijven ? Of is dit enkel nodig in het *.cpp of in het *.h bestand?

Ik hoop dat iemand kan antwoorden :).

- Jonas

edit: nog een vraagje:

- Als ik in main.cpp een functie wil declareren, dan moet ik er eerst bijvoorbeeld dit voor zetten void test::test(), hiermee bedoel ik die ::. Moet ik dit ook in het *.h file doen? Of mag ik daar gewoon void test() neerzetten?
« Laatst bewerkt op: januari 16, 2012, 18:36:15 pm door jonas »

Offline Divendo

  • Administrator
  • Zeer gerespecteerd lid
  • ********
  • Berichten: 2309
  • Voer in op google maps: 37.971458,23.726706
    • Divendo Webs
Re: [tut] eigen headers maken
« Reactie #17 Gepost op: januari 16, 2012, 22:01:21 pm »
In de .h komen alle declaraties, dat is dus zonder ::
Code: C++
  1. #ifndef HEADER_H
  2. #define HEADER_H
  3.  
  4. // Nodig voor deze class
  5. #include <string>
  6.  
  7. // De declaratie v/d class
  8. class toetscijfer
  9. {
  10.     public:
  11.         std::string omschrijving;
  12.  
  13.         toetscijfer(const float& init, const std::string& omschrijving);
  14.  
  15.         float cijfer() const;
  16.         void veranderCijfer(const float& nieuwCijfer);
  17.  
  18.     private:
  19.         float huidigCijfer;
  20. };
  21.  
  22. #endif /* HEADER_H */

Zoals je ziet moet je je includes dus gewoon als altijd doen, gezien je een string nodig hebt include je de header <string>

De implementatie ziet er dan zo uit:
Code: C++
  1. // Headers includen
  2. #include "header.h"
  3. #include <algorithm>
  4.  
  5. // Implementatie v/d class
  6. toetscijfer::toetscijfer(const float& init, const std::string& omschrijving)
  7. : huidigCijfer( std::min(std::max(init, 1.0), 10.0) ), omschrijving(omschrijving) {}
  8.  
  9. float toetscijfer::cijfer() const
  10. { return huidigCijfer;}
  11.  
  12. void toetscijfer::veranderCijfer(const float& nieuwCijfer)
  13. { huidigCijfer = std::min(std::max(nieuwCijfer, 1.0), 10.0); }

Zoals je ziet moet je hier wel de toetscijfer:: neerzetten omdat de compiler moet weten tot welke class de functie behoort.
Je hoeft <string> niet meer te includen omdat die al in je header geïnclude is en je hier je header include, en dus indirect ook <string>.
Verder gebruiken we hier ook functies uit <algorithm> (namelijk std::min() en std::max()), maar omdat die enkel in het cpp-bestand gebruikt worden hoeft die header ook pas daar geïnclude te worden.

Merk op dat het cpp-bestand enkel aan je project toegevoegd moet zijn.
Je moet nooit een cpp-bestand includen in een ander bestand!
Admin - http://divendo-webs.com
[C++][PHP][JavaScript][HTML][XML][CSS][SQL][Bash][GML][Nederlands][Engels][Latijn]

"Leren is proberen."

Online jonas

  • Ervaren lid
  • ******
  • Berichten: 726
Re: [tut] eigen headers maken
« Reactie #18 Gepost op: januari 17, 2012, 06:13:26 am »
Ach zo, ik dacht dat het misschien niet meer moest omdat je al die #include "header.h hebt staan. Zo dacht ik dat de compiler al wist tot welke class de lidfucnties behoren. :)

Wat betreft het includen van andere headers zoals string, algorithm, etc.: best wel lohisch eigenlijk :).

Bedankt voor het antwoord!

- Jonas

Offline dirkwillem

  • Actief lid
  • ****
  • Berichten: 236
  • Grappig, dit is net een tweede signature!
    • De site van DirkWillem
Re: [tut] eigen headers maken
« Reactie #19 Gepost op: januari 17, 2012, 15:34:22 pm »
zou ik dat in deze tutorial zetten, of een eigen headers deel 2 maken, aangezien dit toch wel lastiger is...
Stop censuur!

Online jonas

  • Ervaren lid
  • ******
  • Berichten: 726
Re: [tut] eigen headers maken
« Reactie #20 Gepost op: januari 17, 2012, 15:50:59 pm »
Kies maar :). Het hangt er natuurlijk van af hoe veel je nog wil toevoegen. Als je alleen dit wil toevoegen wat ik net vroeg, dan zou je het misschien wel hierbij kunnen zetten. Maar als je de uitleg van jeetee erbij wil zetten én dan nog eens de uitleg van Divendo, dan zou ik misschien wel eens gaan overwegen om een nieuw topic te openen.

Maar dat is natuurlijk volledig jouw keuze :).

Offline dirkwillem

  • Actief lid
  • ****
  • Berichten: 236
  • Grappig, dit is net een tweede signature!
    • De site van DirkWillem
Re: [tut] eigen headers maken
« Reactie #21 Gepost op: januari 17, 2012, 17:00:03 pm »
ik ga vanavond wel even aan de gang...
Stop censuur!

Online jonas

  • Ervaren lid
  • ******
  • Berichten: 726
Re: [tut] eigen headers maken
« Reactie #22 Gepost op: januari 25, 2012, 17:41:56 pm »
Nog een vraagje dat hier wel bij past denk ik:

Citaat
Je hoeft <string> niet meer te includen omdat die al in je header geïnclude is en je hier je header include, en dus indirect ook <string>.
Verder gebruiken we hier ook functies uit <algorithm> (namelijk std::min() en std::max()), maar omdat die enkel in het cpp-bestand gebruikt worden hoeft die header ook pas daar geïnclude te worden.

Dit staat even terug, en is gepost door Divendo...Nu, is het slim om gewoon alle headers op één plaats te includen? Bijvoorbeeld alle headers in het *.h bestand te includen? Zo hoef ik geen headers in het *.cpp te inlcuden, en staan alle includes op één plaats.

En, als je nu die #ifdef enzo hebt staan, include je de headers boven deze regel, of eronder?

En dan ook nog, als je een *.h bestand moet includen, include je de andere headers boven deze iclude, of doe je dat eronder?

- Jonas

Offline Divendo

  • Administrator
  • Zeer gerespecteerd lid
  • ********
  • Berichten: 2309
  • Voer in op google maps: 37.971458,23.726706
    • Divendo Webs
Re: [tut] eigen headers maken
« Reactie #23 Gepost op: januari 26, 2012, 12:59:26 pm »
Ik kies er juist soms voor om een paar includes in het .cpp bestand te doen omdat dat in rest van de code niet nodig is.
Die header include je namelijk ook in andere bestanden, en dus include je op die manier alles wat in die header staat.
Dit is vooral wat je stijl is en het heeft beide voor- en nadelen.

Ik zou het onder dat blokje #ifdef zetten (niet onder #endif uiteraard).
Dat blokje zorgt er namelijk voor dat de code tussen #ifdef en #endif maar 1x door de compiler gezien wordt, zodat je geen dubbele declaraties krijgt.
Nou is het geen probleem om 2x #include <string> te hebben, maar dit vertraagt het compilen wel weer een klein beetje.

Op zich maakt het niet uit welke je eerst include.
Alleen zou ik als ik jou was eerst de .h includen.
Als je dat niet doet kan het bijvoorbeeld zijn dat je #include <string> boven de #include "header.h" zet.
Vervolgens wordt daardoor in je .cpp bestand (het bestand dat de compiler gaat compileren) de inhoud van <string> boven die van "header.h" gezet.
Dat betekent dat op die manier <string> eigenlijk ook in "header.h" ge-include wordt.
Dat is dus op zich geen ramp, het probleem is alleen dat je dan misschien ook een std::string nodig hebt in "header.h" en je vergeet om #include <string> in je header te zetten.
De compiler zal het immers toch compileren omdat #include <string> boven #include "header.h" staat in je .cpp bestand.

Kortom: include eerst je eigen headers en daarna andere headers om irritante foutjes tijdens het debuggen te voorkomen.
Admin - http://divendo-webs.com
[C++][PHP][JavaScript][HTML][XML][CSS][SQL][Bash][GML][Nederlands][Engels][Latijn]

"Leren is proberen."

Online jonas

  • Ervaren lid
  • ******
  • Berichten: 726
Re: [tut] eigen headers maken
« Reactie #24 Gepost op: januari 26, 2012, 16:53:53 pm »
Ok, bedankt, dat is nu ook duidelijk :).

Offline dirkwillem

  • Actief lid
  • ****
  • Berichten: 236
  • Grappig, dit is net een tweede signature!
    • De site van DirkWillem
Re: [tut] eigen headers maken
« Reactie #25 Gepost op: februari 08, 2012, 16:04:47 pm »
even een linkje toegevoegd naar deel 2
Stop censuur!

Advertentie: