class CTestA { public: virtual void SayHello(); } class CTestB : public CTestA { public: void SayHello(); }
Jos määrittelen luokat noin, niin miten voin kutsua CTestB:stä CTestA:n SayHello() funktiota?
Mod. lisäsi kooditagit
Eikös se mene ihan niin jotta:
//CTestB:n Sayhellossa CTestA::SayHello();
Muutan kysymystä:
class CTestA { public: void SetA(int a); virtual void SayNumber() { cout << a; } protected: int m_a; } class CTestB : public CTestA { public: void SayNumber(); }
Jos määrittelen luokat noin, niin miten voin kutsua CTestB:stä CTestA:n SayNumber() funktiota niin että se käyttää CTestB:n muuttujaa m_a?
Mod. lisäsi kooditagit
CTestB:llä ei ole muuttujaa m_a, koska se on määritelty privaatiksi. Onko m_a:n pakko olla privaatti? Jos ei, niin pitäisi toimia vaihtamalla private protectediksi.
Ongelma on siinä, että haluan kutsua alkuperäistä funktiota niin, että se käyttäisi CTestB:n muuttujaa m_a. m_a kuuluu CTestB:en, koska CTestB perii CTestA:n ominaisuudet.
MR.Coodari kirjoitti:
CTestB:llä ei ole muuttujaa m_a, koska se on määritelty privaatiksi.
Ei, vaan se on määritelty suojatuksi, jolloin sitä voi käyttää myös perityistä luokista.
DrDeath kirjoitti:
CTestB:n muuttujaa m_a.
Eihän sinulla ole CTestB:ssä erillistä m_a-muuttujaa, eikä sellaista olisi mahdollista käyttääkään. Ja eikö nykyinen koodisi toimi muka oikein?
class A { protected: int x; public: void funktio() { std::cout << x << std::endl; } }; class B: public A { public: void funktio() { x = 10; A::funktio(); } };
P.S. Opettele käyttämään kooditageja ja sisentämään koodisi siististi.
Hei! Se oli private vielä kun viimeksi katoin! Vai tekikö väsymys tepposet...
Aihe on jo aika vanha, joten et voi enää vastata siihen.