Hogyan tudom meghívni az operator= és a másoló konstruktort?
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.
"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. "
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.
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!