Struct Constructor i C ++?

stemmer
281

Kan en structha en konstruktør i C ++?

Jeg har prøvd å løse dette problemet, men jeg får ikke syntaksen.

Publisert på 14/07/2009 klokken 19:12
kilden bruker
På andre språk...                            


16 svar

stemmer
382

I C ++ den eneste forskjellen mellom en classog en structer at medlemmer og grunnklasser er private som standard i klassene, mens de er offentlige som standard i structs.

Så structs kan ha konstruktører, og syntaksen er den samme som for klasser.

Svarte 14/07/2009 kl. 19:14
kilden bruker

stemmer
131
struct TestStruct {
        int id;
        TestStruct() : id(42)
        {
        }
};
Svarte 14/07/2009 kl. 19:14
kilden bruker

stemmer
31

Ja, men hvis du har strukturen i en fagforening så kan du ikke. Det er det samme som en klasse.

struct Example
{
   unsigned int mTest;
   Example()
   {
   }
};

Fagforeninger vil ikke tillate konstruktører i structs. Du kan lage en konstruktør på union skjønt. Dette spørsmålet angår ikke-trivielle konstruktører i foreninger.

Svarte 14/07/2009 kl. 19:16
kilden bruker

stemmer
28

Alle de ovennevnte svarene teknisk besvare asker spørsmål, men tenkte jeg skulle peke ut en sak der du kan støte på problemer.

Hvis du erklære din struct som dette:

typedef struct{
int x;
foo(){};
} foo;

Du vil ha problemer med å erklære en konstruktør. Dette er selvfølgelig fordi du ikke har faktisk erklært en struct som heter "foo", har du opprettet en anonym struct og tilordnet den alias "foo". Dette betyr også at du ikke vil være i stand til å bruke "foo" med en scoping operatør i en kostnad per fil:

foo.h:

typedef struct{
int x;
void myFunc(int y);
} foo;

foo.cpp:

//<-- This will not work because the struct "foo" was never declared.
void foo::myFunc(int y)
{
  //do something...
}

For å fikse dette, må du enten gjøre dette:

struct foo{
int x;
foo(){};
};

eller dette:

typedef struct foo{
int x;
foo(){};
} foo;

Hvor sistnevnte skaper en struct kalt "foo" og gir den alias "foo" slik at du ikke trenger å bruke structsøkeordet når du henviser det.

Svarte 15/01/2013 kl. 23:34
kilden bruker

stemmer
22

Som de andre svarene nevner, er en struct i utgangspunktet behandles som en klasse i C ++. Dette gjør at du kan ha en konstruktør som kan brukes til å initialisere struct med standardverdier. Nedenfor tar konstruktøren szog bsom argumenter, og initialiserer de andre variablene til noen standardverdier.

struct blocknode
{
    unsigned int bsize;
    bool free;
    unsigned char *bptr;
    blocknode *next;
    blocknode *prev;

    blocknode(unsigned int sz, unsigned char *b, bool f = true,
              blocknode *p = 0, blocknode *n = 0) :
              bsize(sz), free(f), bptr(b), prev(p), next(n) {}
};

bruk:

unsigned char *bptr = new unsigned char[1024];
blocknode *fblock = new blocknode(1024, btpr);
Svarte 28/03/2013 kl. 23:13
kilden bruker

stemmer
14

Ja. En struktur er akkurat som en klasse, men som standard public:, i klassen definisjonen og når arve:

struct Foo
{
    int bar;

    Foo(void) :
    bar(0)
    {
    }
}

Tatt i betraktning det andre spørsmålet, vil jeg foreslå at du leser gjennom noen tutorials . De vil svare på dine spørsmål raskere og mer komplett enn vi vil.

Svarte 14/07/2009 kl. 19:15
kilden bruker

stemmer
12
struct HaveSome
{
   int fun;
   HaveSome()
   {
      fun = 69;
   }
};

Jeg vil heller initial inne konstruktøren slik at jeg ikke trenger å holde orden.

Svarte 15/07/2009 kl. 17:48
kilden bruker

stemmer
11

Ja strukturer og klasser i C ++ er det samme, bortsett fra at strukturer medlemmene er offentlige som standard, mens klasser medlemmer er private som standard. Alt du kan gjøre i en klasse bør du være i stand til å gjøre i en struktur.

struct Foo
{
  Foo()
  {
    // Initialize Foo
  }
};
Svarte 14/07/2009 kl. 19:15
kilden bruker

stemmer
9

Merk at det er en interessant forskjell (i hvert fall med MS C ++ kompilator):


Hvis du har en vanlig vanilje struct som dette

struct MyStruct {
   int id;
   double x;
   double y;
} MYSTRUCT;

så et annet sted kan du initialisere en rekke av slike gjenstander som dette:

MYSTRUCT _pointList[] = { 
   { 1, 1.0, 1.0 }, 
   { 2, 1.0, 2.0 }, 
   { 3, 2.0, 1.0 }
};

Men så snart du legger til en brukerdefinert konstruktøren å MyStruct slik som de som er omtalt ovenfor, vil du få en feilmelding som dette:

    'MyStruct' : Types with user defined constructors are not aggregate
     <file and line> : error C2552: '_pointList' : non-aggregates cannot 
     be initialized with initializer list.

Så det er minst en annen forskjell mellom en struct og en klasse. Denne typen initialisering kan ikke være bra OO praksis, men det ser ut over alt i arven WinSDK c ++ kode som jeg støtter. Bare så du vet det...

Svarte 07/03/2014 kl. 20:47
kilden bruker

stemmer
8

I c ++ struct og c ++ klasse har bare en forskjell ved å standard struct medlemmer er offentlig og klassen er privat.

/*Here, C++ program constructor in struct*/ 
#include <iostream>
using namespace std;

struct hello
    {
    public:     //by default also it is public
        hello();    
        ~hello();
    };

hello::hello()
    {
    cout<<"calling constructor...!"<<endl;
    }

hello::~hello()
    {
    cout<<"calling destructor...!"<<endl;
    }

int main()
{
hello obj;      //creating a hello obj, calling hello constructor and destructor 

return 0;
}
Svarte 21/08/2015 kl. 11:39
kilden bruker

stemmer
5

I C ++ både struct& classer like bortsett fra struct'sstandard medlem tilgang Specifier er publicog klassen har private.

Grunnen til å ha structi C ++ er C ++ er et overordnet C og må ha bakoverkompatibel med legacy C types.

For eksempel hvis språket brukeren prøver å inkludere noen C header fil legacy-c.hi sin C ++ kode og den inneholder struct Test {int x,y};. Medlemmer av struct Testbør være tilgjengelig som liker C.

Svarte 22/10/2013 kl. 15:13
kilden bruker

stemmer
5

Ja, det er mulig å ha konstruktøren i strukturen her er ett eksempel:

#include<iostream.h> 
struct a {
  int x;
  a(){x=100;}
};

int main() {
  struct a a1;
  getch();
}
Svarte 09/10/2011 kl. 20:40
kilden bruker

stemmer
2

Syntaksen er den samme som for klasse i C ++. Hvis du klar for å skape konstruktør i c ++ så er det samme i struct.

struct Date
{
int day;

Date(int d)
{
    day = d;
}
void printDay()
{
    cout << "day " << day << endl;
}

};

Struct kan ha alle tingene som klasse i c ++. Som tidligere sagt Forskjellen er bare at som standard C ++ medlem har privat tilgang, men i struct er det public.But pr programmering betraktning Bruk struct søkeord for data bare strukturer. Bruk klassen nøkkelordet for objekter som har både data og funksjoner.

Svarte 16/05/2017 kl. 15:18
kilden bruker

stemmer
1

Klasse, Struktur og Union er beskrevet i tabellen under i kort.

skriv bildebeskrivelse her

Svarte 08/08/2018 kl. 09:42
kilden bruker

stemmer
1

Enda et eksempel, men ved hjelp av dette søkeordet når du setter verdien i konstruktøren:

#include <iostream>

using namespace std;

struct Node {
    int value;

    Node(int value) {
        this->value = value;
    }

    void print()
    {
        cout << this->value << endl;
    }
};

int main() {
    Node n = Node(10);
    n.print();

    return 0;
}

Kompilert med GCC 8.1.0.

Svarte 01/07/2018 kl. 16:06
kilden bruker

stemmer
1

I C ++, kan vi erklære / definere strukturen akkurat som klasse og har Constructors / destructors for Structures og har variabler / funksjoner som er definert i den. Den eneste forskjellen er standard omfanget av de variable / funksjoner som er definert. Andre enn de ovennevnte forskjell, for det meste bør du være i stand til å etterligne funksjonaliteten av klassen ved hjelp structs.

Svarte 14/07/2009 kl. 19:36
kilden bruker

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