Ich hab heute ein bißchen Ärger mit Mehrfachvererbung gehabt: Meiner Meinung nach sollte folgendes Programm "Item::start" ausgeben, es gibt aber "Item::draw" aus:
Code:
#include <iostream>
using namespace std;
class Item {
public:
virtual void start() { cerr << "Start" << endl; }
};
class Sprite {
public:
virtual void draw() { cerr << "Draw" << endl; }
};
class Object : public Sprite, public Item {
public:
void start() { cerr << "Item::start" << endl; }
void draw() { cerr << "Item::draw" << endl; }
};
int main(int argc, char** argv) {
Object* obj = new Object();
Sprite* spr = (Sprite*)obj;
Item* itm = (Item*)spr;
itm->start();
}
Ich nehme mal an, dass das nicht vorgesehen ist und mir das Programm eigentlich mit einem Segfault abschmieren. In Java darf man meiner Meinung nach sowas machen und in C++ sollte es auch gehen, da ja die Adresse des Pointers die gleiche bleibt. Wenn man von obj direkt auf itm castet, geht es auch.
Lesezeichen