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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.