Iski muistikatkos.
Kun c :ssa luodaan luokka A joka perii luokan B, kutsuuko se vain luokan A konstruktoria (oikea termi?), vaiko sekä A:n että B:n konstruktoreita?
Miten voisi peritystä luokasta A kutsua isäntäluokan B -konstruktoria (ts sitä alustusfunktiota)?
Kun c :ssa luodaan luokka A joka perii luokan B, kutsuuko se vain luokan A konstruktoria (oikea termi?), vaiko sekä A:n että B:n konstruktoreita?
Miten voisi peritystä luokasta A kutsua isäntäluokan B -konstruktoria (ts sitä alustusfunktiota)?
Vastaukset 3
Vanhimmat
Voit kutsua mitä tahansa isäntäluokan metodia B::metodi.
Konstruktoriin tuo ei ole ainakaan joskus muinoin pätenyt enkä usko, että se ANSI-C :ssa on vieläkään.
Eli isäntäluokka täytyy luoda _ennen_ A:n alustusmetodiin tulemista, mikä tietenkin on aivan hemmetin mielenkiintoista, kun leikkii näppärämpää kuin onkaan :)
class B { /* blah blah */ };
class A : public B {
A(A_luontiparametrit):B(B_luontiparametrit) {
// B:n alustustoimet tähän
}
};
A a = A(); //kutsutaan ensin B:n konstruktoria ja //sitten A:n konstruktoria.
Mitä voimme tästä päätellä? C :n syntaksissa olisi parannettavaa. Samalla tavalla voidaan ennen B:n alustustoimia luoda sen jäsenmuuttujat. Jos B:llä ei ole alustusparametreja --- mikä on kyllä outoa :) --- niin syntaksi on hieman helpompi:
//A:n konstruktori
A {
//A:n omat toimet
};