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.