Kenti Skrevet 6. desember 2005 Skrevet 6. desember 2005 (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 6. desember 2005 av Kenti
Dead_Rabbit Skrevet 6. desember 2005 Skrevet 6. desember 2005 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 )
Peter Skrevet 6. desember 2005 Skrevet 6. desember 2005 Zirener har rett, men jeg kan godt sparke deg i leggen uansett.
teflonpanne Skrevet 6. desember 2005 Skrevet 6. desember 2005 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
Dead_Rabbit Skrevet 6. desember 2005 Skrevet 6. desember 2005 (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 , hehe) Edit: Ævve! Kansje leggen min er følsom for spark da, kansje?? Endret 6. desember 2005 av zirener
Peter Skrevet 7. desember 2005 Skrevet 7. desember 2005 Returnerer den A eller en peker til A? Sånn som dette: A* aaa = new A(); Tror jeg egentlig har dette fra Java, men kjekt å sjekke...
Dead_Rabbit Skrevet 7. desember 2005 Skrevet 7. desember 2005 Hm, vet ikke helt om jeg skjønte spørsmålet ditt, Nazagul, men jeg prøver allikevel 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;
Kenti Skrevet 7. desember 2005 Forfatter Skrevet 7. desember 2005 (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 7. desember 2005 av Kenti
Dead_Rabbit Skrevet 7. desember 2005 Skrevet 7. desember 2005 Så bra! Testa f.eks. ut å kalle en funksjon fra "objektet" t, men da fikk jeg jo en feilmelding hvor kompilatoren gjorde sitt beste for å forklare meg at dette ikke var lovlig.
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå