Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [C++] Alkuperäisen funktion kutsuminen

DrDeath [31.05.2009 21:49:12]

#

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

crafn [31.05.2009 21:51:03]

#

Eikös se mene ihan niin jotta:

//CTestB:n Sayhellossa
CTestA::SayHello();

DrDeath [31.05.2009 21:57:37]

#

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

crafn [31.05.2009 22:03:11]

#

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.

DrDeath [31.05.2009 22:11:04]

#

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.

Metabolix [31.05.2009 22:41:17]

#

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.

crafn [31.05.2009 22:48:33]

#

Hei! Se oli private vielä kun viimeksi katoin! Vai tekikö väsymys tepposet...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta