Kezdőoldal » Számítástechnika » Programozás » C++ egyik konstruktor meghívha...

C++ egyik konstruktor meghívhatja a másik konstruktort?

Figyelt kérdés

2012. jún. 27. 18:45
 1/8 anonim ***** válasza:

Csak a felmenőiét.

pl.:

class Base

{

public:

int i;

Base(int i) { a = i; }

};


class Other : Base

{

public:

int j;

Other(int i, int j) : Base(i) { this.j = j }

}

2012. jún. 27. 18:52
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
a = i; helyett this.i = i
2012. jún. 27. 18:55
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
Tehát a default paraméter átadását nem lehet konstruktor hívással + értékadással helyettesíteni?
2012. jún. 27. 19:20
 4/8 anonim ***** válasza:

Nem igazán értem hogy mit szeretnél.


Arra gondolsz, hogy lehet olyat is hogy:


class test

{

public:

int a;

test(int i) : a(i) {}

};


?

2012. jún. 27. 20:33
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Egyik osztálybeli konstruktor meghívhatja a másik ugyan azon osztálybeli konstruktort. (A konstruktor egy speciális metódus tulajdonképpen.)

Pl.:

class A{

private:

int x;

public:

A(){A(0);}

A(int i){x=i;};

};

----

A(int i) konstruktor is meghívhatná a A() konstruktort, hívogathatnák egymást,ez kontrollálás nélkül végtelen hívási rekurzív hívási sorozat lenne, persze gyakorlatban szegmens hibával elszállna a program amikor betelne a stack.

2012. jún. 27. 22:22
Hasznos számodra ez a válasz?
 6/8 iostream ***** válasza:

Na most az első (néhány választ író) baromságokat beszél, gőze nincs az egészről.

Az utolsó pedig durván keveri a dolgokat, ha így hívsz konstruktort:

class A{

private:

int x;

public:

A(){A(0);}

A(int i){x=i;};

};


Akkor a konstruktorban létrehozol mégegy ugyanilyen típusú objektumot.


Amit a kérdező szeretne az C++11-ben már lehetséges, de ha nem akar újabb fordítót használni, az általános megoldás az, hogy van egy init() függvényed, ami elintézi az inicializálást, és minden konstruktor ezt hívja.


A C++11-es megoldás így néz ki:


class Foo {

public:

Foo(char x, int y) {}

Foo(int y) : Foo('a', y) {}

};

2012. jún. 27. 22:59
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

Ezt jól összekevertem.

A példámat átírva, megoldható hogy látszólag 2 konstruktorom van, ami valójába 1 (az egyik a default konstruktor). Úgy hogy a paraméternek default értéket adok (persze nem hívja meg egyik konstruktor a másikat,nincs is 2 sem):

class A{

private:

int x;

public:

A(int i=0){x=i;};

};

2012. jún. 28. 00:23
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Ha nem fejtem ki a fenti default konstruktort a deklarációban, akkor a default =... részt a kifejtésben is ki kell írni, vagy elegendő a deklarációban? Vagy lehet csak a kifejtésben és a deklarációban nem?
2012. jún. 28. 08:10

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!