ist das überladen oder nicht?

12/11/2015 17:51 Slade100#1
hey eine kleine frage,
kann man eine methode in einer anderen klasse überladen?
also ich weiß was überladen ist, aber wäre das hier überladen oder nicht?
Code:
class A
{
  public:
    void say(short x){ cout << "x is " << x << endl; }
};
class B:public A
{
  public:
    void say(short x, short y){ cout << "x is " << x << " and y is " << y << endl; }
};
weil da die methode say(short x) aus der klasse A sozusagen bei der deklaration von say in klasse B "versteckt" wird und man das nur benutzen kann in dem man beim aufruf so darauf zugreift:
Code:
B b;
b.A::say(24)
bin ich mir nicht sicher ob das noch als überladen gilt.
ich weiß auch das man das using in der klasse B benutzen kann um A:: in der main dann wegzulassen.
12/11/2015 18:35 hazejp#2
Ich denke, das zählt nicht als Überladung.
Um deine Methode aus der Basisklasse zu "verstecken", könntest du theoretisch privat von Klasse A erben und dabei ggf. noch benötigte Methoden als Wrapper definieren.
12/11/2015 18:51 Daifoku#3
Du solltest über eine Fassade nachdenken und einen geeigneten Adapter konstruieren.
Es handelt sich hier um kein Überladen von Methoden, da der Kontextbereich unterschiedlich ist.
12/11/2015 19:00 Slade100#4
danke euch erstmal,
@hazejp also ich will das ja nicht verstecken, c++ macht das automatisch wenn eine methode in der abgeleiteten klasse den selben namen hat wie eine methode in der basisklasse.

@daifoku was genau meinst du mit kontextbereich? das dass unterschiedliche klassen sind?
12/11/2015 19:59 MuffinMario#5
Quote:
Originally Posted by Slade100 View Post
danke euch erstmal,
@hazejp also ich will das ja nicht verstecken, c++ macht das automatisch wenn eine methode in der abgeleiteten klasse den selben namen hat wie eine methode in der basisklasse.

@daifoku was genau meinst du mit kontextbereich? das dass unterschiedliche klassen sind?
Der Namensbereich zwischen den Funktionen ist immer noch unterschiedlich. Es ist somit kein Funktionsüberlauf.
du kannst x.func(1,1) machen, aber nicht x.func(1)
somit ist klar, dass der Bereich, in dem func(1) ist ein anderer ist, als der von func(1,1). Na klar haben die beiden Funktionen den gleichen Namen, doch solange der Bereich nicht der gleiche ist überlädt die Funktion nicht.