Avatar billede ossicpp Nybegynder
25. maj 2009 - 13:40 Der 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?

Mvh ossicpp
Avatar billede arne_v Ekspert
25. maj 2009 - 14:07 #1
Generelt vil jeg anbefale kun at lave simpel data initialisering i constructor - ikke noget som faktisk "gør noget".

Et af argumenterne for exceptions er at de kan smides fra en constructor.
Avatar billede ossicpp Nybegynder
25. maj 2009 - 14:30 #2
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?
Avatar billede arne_v Ekspert
25. maj 2009 - 16:12 #3
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.
Avatar billede ossicpp Nybegynder
25. maj 2009 - 18:14 #4
Ok, så man kan tillade sig at lave nogle funktionskald i ctor og så bruge exception for at fejlmelde.

Jeg siger tak for din hjælp arne_v.

Smid et svar.
Avatar billede arne_v Ekspert
25. maj 2009 - 18:18 #5
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester