Hogyan lehet ezt megoldani C++ inicializáló listában örökélnél?
Tegyük fel, hogy van egy String osztályom amit én csináltam.
Egy paraméter nélküli konstruktorral.
String() :pData(0), len(0) {
pData = new char[1];
pData[0]= '\0';
}
-------------------------------------------
Csináltam egy másik osztályt, ami legyen "Valami".
class Valami{
String egyString;
int egySzam;
public:
Valami(String s = "nincs adat", int n = 0)
:egyString(s), egySzam(n){}
----------------------------
A Cél, hogy tudjak paraméter nélkül objektumok képezni Valamiből.
A fenti megoldással ez sikerül.
Valami a;
Helyes lenne...
Viszont arra lennék kíváncsi, hogy meg lehet-e csinálni, hogy a Stringnek a paraméterben nem adok meg alapértéket ("Nics adat") hanem valahogy hagyom, hogy a String class paraméter nélküli konstruktora hívódjon meg és az adjon vissza egy üres "stringet".
Viszont ha így csinálom:
Valami(String s, int n = 0)
:egyString(s), egySzam(n){}
Akkor a
Valami valami;
Nem lesz értelmes, mert a String helyére kér értéket...
Meg lehet valahogy csinálni, hogy az String osztályom paraméternélküli konstruktorát hívja és ne kelljen = "Nicns adat" paramértet adnom.
Vagy ha nem, akkor hogy csinálnátok meg?





Nem a te mintádat követtem, hanem írtam egy ilyet. Több konstruktort lehet csinálni. Csak! C++ megtudja különböztetni a metódusokat paraméterezés alapján, de nem a visszatérési típusa alapján (ellentétben a Java-val).
class MyClass {
public:
int method1(int a) {...}
int method2(int a, int b) {...} // eddig oké
long method2(int a, int b) {...} // ez nem oké, mert már van method2, de Java nyelv a return típusa miatt megtudja különböztetni. A C++ nem!!!
};
---
Kérdésre a válasz:
class MyClass {
public:
int a;
MyClass(): a(1) {}
MyClass(int a): a(a) {}
};
int main() {
MyClass a;
MyClass b(2);
std::cout << a.a << "\n"; // output: 1
std::cout << b.a << "\n"; // output: 2
}





Bocs! Ezt akartam írni: simán method, nem pedig method1 vagy method2!
class MyClass {
public:
int method(int a) {...}
int method(int a, int b) {...} // oké
long method(int a, int b) {...} // hiba
};
További kérdések:
Minden jog fenntartva © 2025, 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!