Kezdőoldal » Számítástechnika » Programozás » Hogyan tudom meghívni az...

Hogyan tudom meghívni az operator= és a másoló konstruktort?

Figyelt kérdés

Ha van például egy osztályom legyen az class X ez legyen a bázisosztály plusz még létrehozok még egy osztály a class Y -t. Az Y osztály a származtatott osztály az X pedig a bázis osztály.


A bázisosztálynak vannak tagmutatói ezért amikor lefut az Y az az származtatott osztály copy konstruktora akkor azt szeretném ha a bázisosztály copy konstruktora is meghívódjon,hogyan csináljam?


Öröklődésnél a bázisosztály konstruktora alapból meghívódik nem kell azt meghívni meg a destruktor is csak ott először a származtatott osztályé fut le.

A copy konstruktor és az operator= pedig meg kéne hívni mert automatikusan ezek nem hívódnak meg.


2 megoldást tudok a problémámra.

Az egyik: A származtatott osztályban(Y) létrehozom a bázisosztály(X) egy példányát.Így a származtatott osztálynak lesz egy bázisosztály típusú adattagja aztán a származtatott osztály copy konstruktorába csak így meghívom:

X(rhs.i_getObj)


A másik lehetőség pedig az,hogy felesleges a bázisosztály copy konstruktor meghívásával törődni mert valójában a bázistípus adattagjai származtatva vannak az Y származtatott osztályban.Így aztán bázisosztálytól örökölt adattagokat másolhatnám én a származtatott osztály copy konstruktorában.


De engem érdekelne,hogy meg e lehet valahogy hívni a bázisosztály copy konstruktorát egy származtatott osztály copy konstruktorából úgy,hogy a származtatott osztálynak nincs egy bázisosztálybeli objektuma(Ami a származtatott osztály Y egy adattagja) sem.


2012. okt. 7. 05:10
 1/2 A kérdező kommentje:

"A másik lehetőség pedig az,hogy felesleges a bázisosztály copy konstruktor meghívásával törődni mert valójában a bázistípus adattagjai származtatva vannak az Y származtatott osztályban.Így aztán bázisosztálytól örökölt adattagokat másolhatnám én a származtatott osztály copy konstruktorában."


Ez miért nem működik az inicializáló listában(csak akkor működik ha nem az inicializáló listában inicializálok).A fordító szerint azért nem mert a származtatott osztálynak nincsen például its_i adattagja.

Pedig kell,hogy legyen neki mert származtatva lett a bázisosztálytól.


Az inicializáló lista nem érzékeli a származtatott adattagokat?


Aztán még legyetek szívesek erre a kérdésre is válaszolni:

De engem érdekelne,hogy meg e lehet valahogy hívni a bázisosztály copy konstruktorát egy származtatott osztály copy konstruktorából úgy,hogy a származtatott osztálynak nincs egy bázisosztálybeli objektuma(Ami a származtatott osztály Y egy adattagja) sem. "

2012. okt. 7. 05:48
 2/2 iostream ***** válasza:

A másoló konstruktor is csak egy konstruktor, és mint ilyen, az inicializáló listában van a helye a bázisosztály inicializálásának, hiszen az mindenképp megtörténik a konstruktor törzse előtt:


#include <iostream>


class X

{

public:

X() {}

X(const X& oth)

{

std::cout << "X copy constructor\n";

}

};


class Y: public X

{

public:

Y()

{}

Y(const Y& oth): X(oth)

{

std::cout << "Y copy constructor\n";

}

};


int main(int argc, char* argv[])

{

Y y1;

Y y2(y1);

}


Az adattagokat meg valószínűleg azért nem éred el, mert privát láthatósággal vannak megadva.

2012. okt. 7. 13:03
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!