Klasse vs Struct kun data?

stemmer
9

Er det noen fordel ved hjelp av en klasse over en struct i slike tilfeller? (Merk: det vil bare holde variabler, vil det aldri være funksjoner)

class Foo { 
private:   
   struct Pos { int x, y, z };
public:    
   Pos Position; 
};

Mot:

struct Foo {
   struct Pos { int x, y, z } Pos;
};

Lignende spørsmål:

Publisert på 10/01/2009 klokken 17:54
kilden bruker
På andre språk...                            


7 svar

stemmer
18

Det er ingen reell nytte av å bruke en over den andre, i C ++, er den eneste forskjellen mellom en struct og en klasse standardsynligheten av sine medlemmer (structs standard for publikum, klasser standard til private).

Personlig pleier jeg å foretrekke structs for POD typer og bruke klasser for alt annet.

EDIT: litb gjort et godt poeng i kommentaren, så jeg kommer til å sitere ham her:

en viktig annen forskjell er at structs stammer fra andre klasser / struct offentlige som standard, mens klasser utlede privat som standard.

Svarte 10/01/2009 kl. 17:58
kilden bruker

stemmer
6

Den ene siden er at structs blir ofte brukt for samlede initialisert datastrukturer, siden alle ikke-statiske data medlemmer må være offentlig uansett (C ++ 03, 8.5.1 / 1).

struct A {  // (valid)
{
   int a;
   int b;
} x = { 1, 2 };

struct A {  // (invalid)
private:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
   int a;
   int b;
} x = { 1, 2 };

class A {  // (valid)
public:
   int a;
   int b;
} x = { 1, 2 };

class A {  // (invalid)
public:
   int a;
private:
   int b;
} x = { 1, 2 };
Svarte 12/01/2009 kl. 20:53
kilden bruker

stemmer
5

structog classmener akkurat det samme i C ++ med unntak av at standard tilgangs for struct medlemmer og baser er offentlig, mens det er privat for klasser. Jeg pleier å velge struct for klasser som kun har offentlige medlemmer og klasser for alt annet, men det er bare en stil problem.

Svarte 10/01/2009 kl. 17:59
kilden bruker

stemmer
2

Den eneste forskjellen mellom en klasse og en struct er at struct medlemmene er offentlige som standard, og klassen er private som standard. Så jeg si gå med hvilken du liker best. Jeg er sikker på at det finnes argumenter for å bli gjort i form hvorav den ene er mer lesbar, men jeg tror ikke det er en stor avtale.

Svarte 10/01/2009 kl. 17:58
kilden bruker

stemmer
1

I hovedsak valget mellom en struct og en klasse kommer ned til din stil og hvor mye du vil skrive.

  • Hvis du bare har offentlige medlemmer i en klasse / konstruere du kan like godt bruke struct søkeord. Det vil spare deg for å måtte skrive ut "public:" senere.
  • Den andre grunnen til å velge en struct over en klasse ville være å implisitt dokumentere hensikten av objektet. Så du ville gjøre POD typer structs (selv om de inneholder en konstruktører og noen statiske hjelpemetoder osv), og du vil bruke klasse for alle de andre "vanlige" klasser.
Svarte 11/01/2009 kl. 00:16
kilden bruker

stemmer
0

Hvis innholdet i den typen har ingen minnetildeling problemer (for eksempel vanlig int), deretter bruke structer greit hvis det er slik du ønsker å gå, og du har gjort et bevisst valg om det som du kan rettferdiggjøre for de som bruker koden din . Men hvis noen av medlemmene er en peker type, så du må tenke hardt om minnet administrative spørsmål. Det kan likevel være OK å bruke en struct, men du er mye mer sannsynlig at du trenger en destructor, og noen konstruktører, og så videre. På dette punktet, vil du ha en class.

Svarte 10/01/2009 kl. 19:13
kilden bruker

stemmer
-1

"(Merk: det vil bare holde variabler, vil det aldri være funksjoner)"

Aldri er et stort ord. Vanligvis "aldri" betyr "slutt". Siden det er tilfelle, vil jeg foreslå at du bruker en klasse. På den måten, når ting endrer seg, du trenger ikke så mye for å endre.

Java (og Python) folk har fått seg fint med alt som en klasse. Det har ikke skade dem noe å ikke ha disse spesialiserte metoden mindre klasser som C ++ kaller en "struct".

Svarte 10/01/2009 kl. 17:58
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more