10. november 2002 - 10:34Der er
17 kommentarer og 1 løsning
Hvad er den bedste af disse kodestile?
Hejsa...
Ville bare lige høre hvad i synes der var bedst og om alle 3 dele (kommer lidt nede) er mulige at bruge.
Jeg har en klasse som jeg har tænkt mig at definere i en headerfil. Jeg har også nogle medlemsfunktionener til den klasse:
1. Er det bedst (og overhovedet lovligt?) at definere sine medlemsfunktionener i den samme header fil som klassen? 2. Er det bedst (og overhovedet lovligt?) at definere sine medlemsfunktionener i en anden header fil? 3. Er det bedst bare at definere dem i sin "hovedfil"?
Jeg foretrækker at opdele i en headerfil og en implementationsfil. Jeg kan godt lide at kunne nøjes med at se på headerfilen hvordan den skal bruges. Altså, hvilke metoder og datamembers der stilles til rådighed. F.eks.
Bog.h
class Bog { public: Bog(); ~Bog(); void setTitle(string newTitle);
protected: string title; };
Bog.cpp #include "Bog.h" Bog::Bog() { }
Bog::~Bog() { }
void Bog::setTitle(string newTitle) { title = newTitle; }
Der er også situationer hvor det kræves at header og implementering er i samme fil. Det skal man når man laver template klasser.
jeg kan ikke helt forstå hvad du mener i punkt 2 og 3, men: .h files skal indeholde alle definitioner af metoder og data members. .cpp skal indeholde implementeringen af metoderne.
Undskyld men jeg er lidt nybegynder - hvad betyder implementationsfil? Er bog.cpp både der hvor man definerer metoderne og hovedfilen eller kun der hvor man definerer metoderne?
Ideen er at du adskiller implementeringen af metoder fra definitionen.
Implementeringen er >hvordan< metoder virker, altså hvordan sorterer jeg biblioteket. Definitionen er >hvad< metoden gør, altså hvilke metoder klassen stiller til rådighed.
Fordi hvis du får stukket en Bog klasse i hånden og får bud på at bruge den, så behøver du ikke kigge i implementeringen af denne for at se hvordan den skal bruges. Det kan du se udfra metoderne.
Ja, forestil dig at du skulle benytte f.eks. <stdio.h> for første gang. Så vil du i headerfilen se at der er nogle metoder, men ikke hvordan disse er programmeret. Du vil måske finde printf(..) og synes at "den vil jeg prøve". Så laver du følgende lille eksperiment:
#include <stdio.h>
int main(int argc, char **argv) { printf("Hello world");
return 0; }
Så har du lavet et program uden at kende til hvordan printf() faktisk er programmeret.
Skrive klassens definition og alle memberfunktioners prototyper i .h filen Skrive klassens memberfunktioners kode i .cpp filen
Udtagelser hertil er IMHO funktioner der kan skrives på een linie - typisk de simple getters/setters.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.