Kezdőoldal » Számítástechnika » Programozás » Objektum orientált programozás...

Objektum orientált programozás: ha két konstruktorom van, lehet-e az egyik által létrehozott objektumból kreálni egy másikat, úgy hogy az első adatai ne vesszenek el?

Figyelt kérdés

class Emberek

{

int hónap;

int nap;

public Emberek(int hónap, int nap)

{

this.hónap=hónap;

this.nap=nap;

}


public Emberek(int nap)

{

this.nap=nap;

}


Az objektumok emberek születésnap alapján jellemezve. Szeretnék írni egy metódust, ami viszont a születésnapjuk hónap-napban megadott dátumát átírja csak napokban megadottra, és azokból is objektumokat hoz létre, de fontos lenne, hogy az eredeti objektumok ne vesszenek el. Megtehetem-e?



2016. nov. 29. 21:21
 1/5 A kérdező kommentje:
Objektum elvesztése alatt azt értem, hogy az új nap-paraméter esetleg fölülírná az eredeti objektum nap-paraméterét. És a kérdés az, hogy ez megtörténhet-e?
2016. nov. 29. 21:24
 2/5 anonim ***** válasza:
51%
Egy árva szót sem értek a kérdésből.
2016. nov. 29. 22:15
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Legyen inkább Ember.

A másik meg, hogy ha egyszer ennek hónap, nap adattagja van, akkor a másik OSZTÁLY nem lehet Ember.


Különben is számított adat, csinálj rá gettert.

2016. nov. 29. 22:26
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

Itt k_rva nagy félreértés van. Most leereszkedő magyarázatot fogok adni, így aki pontos szakmai definícióra várna, az nyugodtan görgessen tovább.


A konstruktor egy tárgynak a gyártási folyamatát írja le. De egy adott tárgy nem csak egy adott gyártási folyamattal készülhet el. Megadhatsz más gyártási folyamatokat is, amik ugyanazt a tárgyat állítják elő. Például, ha székeket akarunk gyártani, ahhoz kell ugye fa és szeg. De írhatok olyan gyártási folyamatot is a székhez, ami fémből és csavarokból állít elő széket. És mindkét esetben a termék ugyanaz lesz, azaz egy szék. Ez ugye így néz ki:


class Szék {

public Szék(Fa anyag, Szeg rögzítő) {...}

public Szék(Vas anyag, Csavar rögzítő) {...}

}


Szóval itt nem arról van szó, hogy az egyik konstruktorod legyárt egy tárgyat, és a másik konstruktor ezt a tárgyat módosítja. Egyébként van lehetőség arra, hogy az egyik konstruktorból (nevezzük "A" konstruktornak) meghívj egy másik konstruktort (nevezzük "B"-nek). Ezt akkor használod, ha az "A" konstruktor valamilyen adatok alapján előállítja a "B" konstruktornak szükséges adatokat. Ez azért lesz jó, mert nem fogod kétszer leírni ugyanazt:


class Ember {

public int Hó;

public int Nap;


public Ember(int Hó, int Nap) {

this.Hó = Hó;

this.Nap = Nap;

}


public Ember(int Napok) { //Itt azt kell megadni, hogy az év hányadik napján született az illető.

int Hó = Napok / 31; //Feltesszük, hogy minden hónap 31 napos.

int Nap = Napok % 31;


this.Hó = Hó; //Mint láthatod, ezt a két sort már egyszer leírtuk, miért tegyük meg kétszer?

this.Nap = Nap;

}

}


Ennek egy egyszerűbb változata ez (C# példa):

class Ember {

public int Hó;

public int Nap;


public Ember(int Hó, int Nap) {

this.Hó = Hó;

this.Nap = Nap;

}


public Ember(int Napok) : this(Napok / 31, Napok % 31) {}

}

2016. nov. 29. 23:01
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Kicsit pontosítok az előzőn. A konstruktor nem gyárt semmit. A konstruktor nem több, mint az a függvény, ami legelőször fut le egy objektum létrehozásakor (megspékelve néhány extra jogosultsággal, mint readonly tagok beállítása). Nem hoz létre semmit. Csak a már létrehozott objektumon lehetőséget ad beállítani a kezdeti tulajdonságait. (más szóval inicializálni)


Ami létrehoz egy új objektumot, az a new kulcsszó. Aztán az objektumra exkluzívan lefut EGY konstruktor, EGYSZER. Szóval nem fogsz konstruktorral belenyúlkálni később, mert arra az objektumra nem fog többé konstruktor futni. Ha akarsz egy metódust ami a hónap-nap formában megadott születésnapot átalakítja napban megadottra (ami mondjuk a szökőévek miatt szerintem élből értelmetlen), akkor azt csinálhatod többféleképpen. Írhatsz egy Emberek visszatérési értékű függvényt, ami egy Emberek típusú paramétert kap, és a hónap/nap értékekből kikalkulálja a napok számát, és a megfelelő konstruktor használatával létrehoz egy új objektumot. (new Emberek(napokSzama))

Vagy mondhatod azt, hogy eleve új konstruktorral oldod meg, ami egy Emberek típusú paraméterből állítja be a kezdőértékeket

(public Emberek(Emberek minta))

De a legjobb az lenne, ha nem kevernéd a szezont a fazonnal, és inkább új adattagként tárolnád el az osztályban a napok számát. Mert elég katyvasz, ha ugyanaz a "napok" adattag néhol a hónap napját, máshol az év napját tárolja. Ezt szeparáld valamilyen módon.

2016. nov. 30. 11:58
Hasznos számodra ez a válasz?

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!