Methoden überdecken

Gast #4527653
Lesenswert?
• ▲
▼
Hallo,

ich habe in einer Basisklasse eine Prototyp identische Methode wie in 
einer Kindklasse:
1
class c_uarttransceiver
2
{
3
  public:
4
    BYTE * dispatcher();                        
5
}; 
6

7
class c_dispatcher : public c_uarttransceiver
8
{
9
  public:
10
    BYTE * dispatcher();    
11
}; 
12

13
c_dispatcher test;
14
test.dispatcher();

Die Methode aus der Klasse c_dispatcher wird aber nicht überdeckt. Es 
wird die Methode aus uarttransceiver verwendet (auch bei 
unterschiedlichen Compilern).

Was mache ich hier falsch? Eigentlich sollte doch die Methode aus 
c_dispatcher verwendet werden oder?

Den Inhalt der Methoden habe ich erspart und das ganze auf das 
Wesentliche konzentriert.

Vielen dank schonmal!
#4527694
Lesenswert?
• ▲
▼
Vermutlich suchst du Virtual.

Ohne Virtual:
1
class a {
2
  public: void m(); // method 1
3
};
4
class b : a {
5
  public: void m(); // method 2
6
};
7
int main(){
8
  {
9
    a* x = new b();
10
    x->m(); // 1
11
  }
12
  {
13
    b* x = new b();
14
    x->m(); // 2
15
  }
16
}

Mit Virtual:
1
class a {
2
  public: virtual void m(); // method 1
3
};
4
class b : a {
5
  public: void m(); // method 2
6
};
7
int main(){
8
  {
9
    a* x = new b();
10
    x->m(); // 2
11
  }
12
  {
13
    b* x = new b();
14
    x->m(); // 2
15
  }
16
}
(Firma: Torrox.de) #4527723
Lesenswert?
• ▲
▼
1
Macintosh:~ todi$ cat t.cpp
2
#include <iostream>
3

4
class c_uarttransceiver
5
{
6
  public:
7
    void dispatcher() {
8
        std::cout << "c_uarttransceiver" << std::endl;
9
    }
10
};
11

12
class c_dispatcher : public c_uarttransceiver
13
{
14
  public:
15
    void dispatcher() {
16
        std::cout << "c_dispatcher" << std::endl;
17
    }
18
};
19

20
int main() {
21
    c_dispatcher test;
22
    test.dispatcher();
23
}
24
Macintosh:~ todi$ g++ t.cpp && ./a.out
25
c_dispatcher
26
Macintosh:~ todi$

Beim meinem Compiler funktioniert es. Aber ich denke mal, Du hast uns 
auch nur die Hälfte der Geschichte erzählt.

mfg Torsten
Gast #4528510
Lesenswert?
• ▲
▼
Um den vorigen Beitrag zu ergänzen: In C++ existiert Polymorphie nur bei 
Zeigertypen. Den Unterschied zwischen statischem und dynamischem Typ 
eines Objekts zu verinnerlichen, kann allgemein sehr hilfreich sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren