Warnung 4250
-
ROFLMAO
-
Artchi schrieb:
In C++ kann ich das machen:
class cowboy { public: draw() { ... } }; class sprite { draw() { ... } }; class my_player : public cowboy : public sprite { };
aber dann nicht das:
my_player mp; mp.draw(); // error - welches draw() :confused:
sowas kriegt, glaub ich, python auf die reihe. c++ aber nicht
-
net schrieb:
aber dann nicht das:
my_player mp; mp.draw(); // error - welches draw() :confused:
Das wäre ja auch herzlich schwachsinnig, denn wovon hinge dann ab, welches draw aufgerufen wird?
Moritz
-
Eben, für C++ kein Problem:
class my_player : public cowboy : public sprite { public: void draw() { cowboy::draw(); sprite::draw(); };
-
audacia schrieb:
net schrieb:
aber dann nicht das:
my_player mp; mp.draw(); // error - welches draw() :confused:
Das wäre ja auch herzlich schwachsinnig, denn wovon hinge dann ab, welches draw aufgerufen wird?
ok, dann mit nur einem draw
class base { public: void draw() {} }; class cowboy : public base { }; class pferd : public base { }; class my_player : public cowboy, pferd { }; ... my_player mp; mp.draw(); // geht auch nicht :confused: :confused: ...
vor allem die fehlermeldung ist witzig
main.cpp:39: error: request for member `draw' is ambiguous
main.cpp:19: error: candidates are: void base::draw()
main.cpp:19: error: void base::draw()
-
net schrieb:
ok, dann mit nur einem draw
... my_player mp; mp.draw(); // geht auch nicht :confused: :confused: ...
Dazu gibts virtuelle Vererbung. Z.B. so:
[cpp]
class base
{
public:
void draw() {}};
class cowboy : virtual public base
{
};class pferd : virtual public base
{
};class my_player : public cowboy, pferd
{
};...
my_player mp;
mp.draw(); // und schon geht es
...
[/cpp]Moritz
-
audacia schrieb:
Dazu gibts virtuelle Vererbung.
das ist cool
-
net schrieb:
aber dann nicht das:
my_player mp; mp.draw(); // error - welches draw() :confused:
Es gibt aber ne Möglichkeit mit der man spezifizeiren kann, welches der beiden draws aufgerufen werden muss. Ich glaubd as ging auch irgendwie mit virtuel, aber ohne den Schritt über die zwischenklassen zu machen. Das ist auch im Standard festgelegt. Wo im übrigen auch stehen müsste, dass solange keine zyklischen Abhängigkeiten vorkommen bei der Mehrfachvererbung keine Probleme und schon gar kein undefiniertes Verhalten auftreten.
Alles ne Frage der sorgfalt.
-
@net:
lächerlich.nichts ist Cowboy UND Pferd
EineKlasse ---> ZwischenKlasseMitInterface1 ---> EndgültigeKlasseMitInterface2
ist auch lächerlich.
Wie soll ich von EineKlasse und von Interface1 erben ohne mehrfach vererbung zu betreiben.
Mehrfachvererbung mit Interfaces ist gängige Praxis. Und wenn ein Interface ne Methode implementiert dann sehe ich daran nichts verwerfliches. Wenn du gegen mehrfachvererbung wettern willst, dann mach es richtig. aber das kann ich dir alles wiederlegen, bis aus die mögliche komplexität (die man sich aber bei Javalike Interfaces auch einfangen kann).
-
Shade Of Mine schrieb:
nichts ist Cowboy UND Pferd
na und? dann denk dir für pferd eben 'squaw' und die unterklasse von beiden ist 'bastard'. an den namen soll's ja nicht scheitern.
Shade Of Mine schrieb:
EineKlasse ---> ZwischenKlasseMitInterface1 ---> EndgültigeKlasseMitInterface2
ist auch lächerlich.
Wie soll ich von EineKlasse und von Interface1 erben ohne mehrfach vererbung zu betreiben.hehe, immerhin bist du der einzige, der's gemerkt hat