Gå til innhold

Kall på default-konstruktør


Anbefalte innlegg

Skrevet (endret)

Edit: Dette er C++.

 

Gitt at T er en klasse, er det noen som kan si meg forskjell på disse to uttrykkene?

 

T t;

T t();

 

T t; vet jeg er at man oppretter et objekt av type "T". Kall på defaultkonstruktør blir gjort.

 

Men hva er T t(); ?

Er det en funksjon t() som returnerer et objekt av type "T"?

 

Man får ikke kompileringsfeil om man skriver T t(); selv om ikke en slik metode er opprettet. Er derfor litt forvirret..

Endret av Kenti
Videoannonse
Annonse
Skrevet

Tror det er lettere å se om det er flere konstruktøerer i en klasse. Så:

class A {
public:
    A() { }
    A(int i) : value(i) { }
private:
    int value;
};

A a;            //Initialiserer a ved å kalle A() på objektet
A aa(34);    //Initialiserer aa ved å kalle A(int) på objektet.
A aaa();      //Blir som eksemple over, bare at vi ikke har noen argumenter til 
                 //konstruktøren, noe som resulterer i et kall til den default konstruktøren

Er m.a.o. det samme om du gjør slik:

T t;

eller slik:

T t();

 

(Spark meg i leggen om jeg tar feil :p)

Skrevet

jeg sparker deg i leggen, fordi du har feil..

A aaa(); sier at du lager en funksjonsprototype som heter aaa og som returnerer A. du må enten bruke A aaa; eller A aaa(param); hvis konstruktøren tar parametere

Skrevet (endret)

Ja, du har helt rett teflonpanne. Det jeg tror jeg tenkte på var noe sånt som

A aaa = A();

eller noe. (Ja, dette er en veldig dårlig unskyldning :blush:, hehe)

 

Edit: Ævve! Kansje leggen min er følsom for spark da, kansje?? :cry:

Endret av zirener
Skrevet

Hm, vet ikke helt om jeg skjønte spørsmålet ditt, Nazagul, men jeg prøver allikevel :p

A a = A(); //Dette lager jo et objekt av typen A, og gir det de default verdiene for A
A* b = A(); //Gir kompileringsfeil, for A() returnerer et A object
A* c = new A();  //Blir vel det samme som en vanlig A* a = A;

Skrevet (endret)

For å svare på mitt eget spørsmål

 

T t();

er å deklarere en funksjon direkte i koden. Det er grunnen til at den ikke gir noen feilmelding når man kompilerer. Fra det stedet man skriver dette i koden har man altså deklarert funksjonen, men det finnes foreløpig ikke noen definisjon for den. Det er lovlig å ha deklarert en funksjon uten å definere den, så det var derfor det kompilerte uten feil.

 

Noen her har konkludert med det samme ser jeg, men tenkte jeg bare skulle si det iom at det har blitt svart både det ene og det andre :)

 

Ganske greit at jeg fant ut av det i dag tidlig, siden jeg hadde C++ eksamen i dag, og dette spørsmålet dukket selvfølgelig opp :)

5264617[/snapback]

 

I alle dager..

Endret av Kenti

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...