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