25. maj 2009 - 13:40Der er
4 kommentarer og 1 løsning
Constructor
Hej Alle.
Jeg har en smule erfaring indenfor C og er begyndt på C++.
Mit spørgsmål er:
Hvor meget eller lidt skal man bruge sin ctor... Ville man f.eks bruge funktioner som socket() i ctoren?? Jeg spørger fordi socket() returnerer -1 ved fejl og ctor kan ikke returnere en værdi. Vil man så typisk lade være med at bruge funktioner som socket() i ctoren? Eller vil man bruge exceptions til at holde hånd om fejlmeddelelser?
Har I nogle regler om hvad og hvor meget i sætter i jeres ctor?
Dvs. At du ikke ville lave et socket() kald i ctor.
Hvordan gør man når f.eks når man har en klasse, som laver en socket eller åbner nogle filer e.l. Ville man så typisk bruge ctoren til at initialisere variabler og så lave member funktioner som så laver socket(), åbner filer osv...?
Grunden til at jeg spørger er at jeg helst vil at brugeren af klassen skal lave så "lidt" som muligt, og at brugeren ikke skal igennem en "masse" member funktioner f.eks for at lave en tcp server osv.
eks. Hvis man har en socket class:
Socket socket(port, ...); // Her bliver alt lavet (socket,bind, listen osv) Dette er den nemme løsning
Hvis man ikke laver socket, bind, listen osv i ctoren, skal brugeren vide at han skal bruge socket member funktionen:
Socket socket(port, ...); socket.makeSocket(); //Her skal brugeren vide mere om brug af klassen, da han skal vide hvilke funktioner og hvornår de skal bruges... Her kan der opstå en masse fejl, hvis brugeren ikke ved hvad han gør...
Min idé er at have en klasse som skjuler en masse funktions kald for brugeren, hvis man ikke gør det meste i ctoren, skal brugeren sætte en masse i gang selv, dvs. potentiale for en masse fejl og bugs.
Hvis man f.eks vil lave en socket klasse hvor f.eks brugeren kun skal kunne bruge read,write funktionerne og at socket, bind og listen bliver lavet "bag kullisen" hvordan gør man det?
Jeg vil finde det fristende at lave en constructor som har port som argument, men kun gemmer værdien i et private field og så en open metode uden argumenter som faktisk laver socket, bind, listen etc..
Men det er også set at det laves i constructor. Så smider de bare en exception i tilfælde af fejl.
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.