cplusplus dedeni
Tomas Chvatal
tchvatal na fordiag.cz
Pátek Září 8 14:52:39 CEST 2023
Dekuji. S tou static prom. jsem to uz pochopil.
zkousim kod co posilate:
class basecls {
public:
int testvar;
basecls() : testvar(100) {}
int getval() {
return testvar;
}
};
class childcls : public basecls {
public:
//int testvar;
childcls() : testvar(200) {}
};
a pri compilaci hlasi na radku childcls() : testvar(200) {}:
error C2614: 'childcls' : illegal member initialization: 'testvar' is not a base or member
Nechapu, proc nemuze inicializovat vlastnost ktera je z basecls zdedena ?
Pokud ale constructor v childcls prepisu takto, tak uz to projde a i spravne funguje:
childcls() {
testvar = 200;
}
Proc?
>Jenomze jste tomu potomkovi tu metodu neprepsal, ale volate metodu predka
A proc musim neco PREPSAT ? Neni jednim z principu objektoveho programovani DEDICNOST ?
Cekal bych, ze kdyz predek neco umi, ze to automaticky pak umi i potomek, ale pracuje samo. s hodnotami
svych "mladsich" vlastnosti/promennych.
Rad bych do toho obj.chovani ++ka nejak vice proniknul. Pak clovek tak nejak lepe vi, jak psat zdravejsi
a ve vysledku i rychlejsi a mensi kod.
Mne by zajimalo, JAK je to MYSLENE. Co vede k tomuto, dle meho, divnemu chovani.
Neprijde vam to nelogicke ?
s přáním hezkého dne / best regards
Tomáš Chvátal
tchvatal na fordiag.cz
----- Původní zpráva -----
Od: Pablo na xpablo.cz
Komu: HW-news
Odesláno: 8. září 2023 12:09
Předmět: Re: cplusplus dedeni
Jenomze jste tomu potomkovi tu metodu neprepsal, ale volate metodu predka, ktery ma jasne dane to, ze vrati hodnotu, kterou ma vratit. V tom priklade v jazyku, ktery jste poslal neni zadny static. I V c++ to jde napsat stejne, ale musite vedet, co delate...
class base {
protected:
const int testvar;
public:
base() : testvar(100) {}
int getval() {
return testvar;
}
};
class child : public base
{
public:
child() : testvar(200) {}
};
by mohlo fungovat (pisu to z ruky, takze bez naroku na spravnost...)
--
Pavel Brychta
http://www.xpablo.cz
---------- Původní e-mail ----------
Od: Tomas Chvatal <tchvatal na fordiag.cz>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 8. 9. 2023 12:01:43
Předmět: Re: cplusplus dedeni
>takze chcete po predkovi (tride basecls),
Ja to preci chci v jednom dotazu po predkovi, ale v druhem po potomkovi.
A prave se divim, ze i ten potomek vraci hodnotu z predka.
Spatne to mozna je, ale ve videni c++ ;-)
VFP kod:
define class base as custom
testvar = 100
proc getVal
return this.testvar
endproc
enddefine
define class child as base
testvar = 200
* metodu getVal tady nemusim nijak zminovat, protoze jsem ji zdedil (a jeji umeni) od predka
enddefine
obj = createobject('child')
? obj.getVal()
vypise, pro mne logicky a dobre, 200
Z meho pohledu - predek to dite naucil "vratit hodnotu sveho testvar" a to dite ma tu hodnotu JINOU nez predek.
s přáním hezkého dne / best regards
Tomáš Chvátal
tchvatal na fordiag.cz
----- Původní zpráva -----
Od: Pablo na xpablo.cz
Komu: HW-news
Odesláno: 8. září 2023 11:48
Předmět: Re: cplusplus dedeni
No uz z principu ne - ten getter (getval()) neni virtual a ani neni override, takze chcete po predkovi (tride basecls), aby vratil hodnotu potomka. Proste to je spatne. Vsadim se, ze basecls::testvar a childcls::testvar budou vracet spravne hodnoty (i kdyz bych predpokladal aspon varovani pri prekladu ze tam jedna promenna ma/dela stin druhe).
--
Pavel Brychta
http://www.xpablo.cz
---------- Původní e-mail ----------
Od: Tomas Chvatal <tchvatal na fordiag.cz>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 8. 9. 2023 11:44:02
Předmět: Re: cplusplus dedeni
Jak predek, tak potomek maji stejnou promennou (tady se tomu nerika
vlastnost ?)
Tedy u potomka, ktery ma napr. jiny "obvod hlavy" bych cekal, ze umi
odpovedet spravnou hodnotu sve hlavy ;-)
s přáním hezkého dne / best regards
Tomáš Chvátal
tchvatal na fordiag.cz
----- Původní zpráva -----
Od: "Jaroslav Buchta" <jaroslav.buchta na hascomp.cz>
Komu: <hw-list na list.hw.cz>
Odesláno: 7. září 2023 19:32
Předmět: Re: cplusplus dedeni
Asi chybi virtual, ale to jde asi stejne jen na metody. Jak by predek
mohl vedet o promene potomka?
Dne 07.09.2023 v 19:28 Tomas Chvatal napsal(a):
> Zdravim.
>
> Muze se mi, prosim, nekdo pokusit vysvetlit, jak je to v C++ mysleno s
> "dedenim" vlastnosti ?
> Jsem "tridne postizeny" z VFP a ted jsem u c++ dost zmateny ;-)
>
> Mam tridu "basecls" (ta ma metody getval())
> Od ni dedim do druhe tridy "childcls". V te mam vlastnost testvar
> predefinovanou na jinou hodnotu.
> class basecls {
>
> public:
>
> static const int testvar=100;
>
> int getval() {
>
> return testvar;
>
> }
>
> };
>
> class childcls : public basecls {
>
> public:
>
> static const int testvar=200;
>
> };
>
>
> std::cout << base.getval() << std::endl;
>
> std::cout << child.getval() << std::endl;
>
>
>
> Proc se mi pri volani getval() na obou objektech
> vraci vzdy 100 ?
>
> Mate nejaky odkaz na pekne vysvetleni jak to s tim dedenim zde je ?
> Jsem jenom tak ovlivnen od jinych jazyku, nebo je to s temi tridami v c++
> takove nejake divne, az hnusne ? ;-)
>
> Diky predem.
>
> s přáním hezkého dne / best regards
> Tomáš Chvátal
> tchvatal na fordiag.cz
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
--------------------------------------------------------------------------
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------------------------------------------------------------------------
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230908/d13f8a44/attachment.htm>
Další informace o konferenci Hw-list