Avatar billede neocron Nybegynder
11. april 2007 - 19:58 Der er 10 kommentarer og
1 løsning

Struct eller classes?

Jeg læser i øjeblikket om classes og structs osv.
Jeg bruger C++, Visual Studio 2005.

Jeg ville gerne høre lidt mere ind til hvornår man bruger structs og hvornår man bruger classes (eller begge dele på en gang?) Er der nogle tilfælde hvor man helt klart ville bruge struct (og omvendt) og er der nogle tidspunkter hvor det ville blive en rodedynge at bruge structs?

Jeg forsøger med dette spørgsmål at abstrahere lidt fra bare at sige "struct" og "class" og forsøge at forstå lidt dybere hvad der ligger til grund mellem at skulle vælge mellem disse.
Avatar billede arne_v Ekspert
11. april 2007 - 20:10 #1
struct i C er kun til data

class i C++ indeholde baade data og kode

struct i C++ er faktisk det samme som classes (bare med forskellige defaults for
public/private)

jeg vil anbefale:
- struct til ren data (C style)
- classes til alt som indeholder kode
Avatar billede dkfire Nybegynder
11. april 2007 - 21:09 #2
Der vil jeg give arne ret.
Brug structs til når du har en samling data'er som hænger sammen.
Brug class hvis du nogle functioner som kun passer sammen med bestemte type data.

At bruge struct og classes skulle aldrig give noget rod, de er netop til for at få lidt mere struktur og samling på ens kode og data.
Avatar billede neocron Nybegynder
11. april 2007 - 22:47 #3
Har jeg ret når jeg siger at man lige så godt kunne bruge struct istedet for en class som denne, når der ikke er noget "kød" på den?:

class testtest {
private:
    int x, y, z;
    double abc, def;
    long test;
public:
    char *str;
    int a, b, c;
};

...
// lav instans af klassen her osv
Avatar billede arne_v Ekspert
11. april 2007 - 23:13 #4
ja

eneste forskel er default paa private/public
Avatar billede neocron Nybegynder
11. april 2007 - 23:33 #5
Har struct en form for private/public?
Jeg ved at man kan neste structs, men om de har en slags private/public deklaration er jeg ikke klar over.

Hvis vi i øvrigt antager at jeg har en struct der hedder minStruct med en variabel (int) a. - er der overhovedet nogen forskel på at initialisere en struct på disse 2 måder (og i så fald - hvilke?):

1)
minStruct *pTest;
pTest->a = 10;
delete pTest;

og

2)
minStruct structtest;
structtest.a = 10;

?
Avatar billede neocron Nybegynder
11. april 2007 - 23:34 #6
En ting er at jeg bedst kan lide pointer strukturen, men den holder nok ikke helt i byretten hvis jeg påstår den er bedst bare fordi jeg er mest vant til "->" operatoren fra PHP classes ;)
Avatar billede arne_v Ekspert
12. april 2007 - 00:51 #7
struct i C har ikke private/public men struct i C++ har
Avatar billede arne_v Ekspert
12. april 2007 - 00:52 #8
som lokal variabel ville jeg vælge 2 og som class member ville jeg vælge 1
Avatar billede intel4004 Novice
12. april 2007 - 11:01 #9
Jeg får lyst til at henvise til et interview med Bjarne Stroustrup som berører dette på et mere abstrakt plan. Altså det med en klasse og dens muligheder for både at indeholde data og opførsel. Men alt med Stroustrup er måske ikke begynderniveau... :)

http://www.artima.com/intv/goldilocks.html

Part 2 er også interessant: http://www.artima.com/intv/modern.html

Mvh Intel4004
Avatar billede neocron Nybegynder
14. april 2007 - 13:58 #10
Tak skal I have :) Jeg har anskaffet mig noget læsestof som gerne skulle berøre disse punkter meget mere grundigt. Arne, vil du smide et svar? Du var trods alt først.

Tak til alle for de gode bidrag :)
Avatar billede arne_v Ekspert
15. april 2007 - 04:28 #11
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