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 }
}
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) {}
};
?
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.
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) {}
};
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;};
};
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!