Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet ezt megoldani...

Hogyan lehet ezt megoldani C++ inicializáló listában örökélnél?

Figyelt kérdés

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?



2020. márc. 19. 15:32
 1/2 anonim ***** válasza:

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

}

2020. márc. 19. 23:42
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:

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

};

2020. márc. 19. 23:44
Hasznos számodra ez a válasz?

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

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!