Beichtpfarrer
Erfahrenes Mitglied
Hoi,
Ich habe eine Klassenhierarchie, in der bestimmte Regeln für den vtable eingehalten werden müssen:
Wie erreiche ich, dass eine Funktion, die ich nicht neu in einer abgeleiteten Klasse definieren will, an einer gewünschten Stelle im vtable steht?
Normalerweise werden die Funktionen doch in Reihenfolge der Definition im vtable aufgelistet, von Basisklassen definierte Methoden vornangehängt, oder nicht, wie dann?
Wenn ja - wie entscheidet sich, von welcher Basisklasse die Methoden zuerst eingetragen werden?
Bei Ersetzung von virtuellen Funktionen in einer Abgeleiteten Klasse, wird die Funktion an der Stelle eingetragen, an der sie auch im vtable der Basisklasse gestanden hätte?
Wie werden Funktionen zur Laufzeit aus dem vtable herausgesucht? Namensvergleich?
Haben rein virtuelle Klassen eigentlich auch einen vtable? Von ihnen kann ja sowieso kein Objekt erstellt werden.
Wenn eine virtuelle Methode in einer Basisklasse public war, eine Unterklasse mit private erbt, die Methode also private übernimmt, was passiert dann, wenn über einen Zeiger auf eine Instanz der Unterklasse die nun private Methode benutzt wird?
Ich habe eine Klassenhierarchie, in der bestimmte Regeln für den vtable eingehalten werden müssen:
Code:
class BaseA{
public:
virtual void virt1(void)=0;
virtual void virt2(void)=0;
};
class BaseB : public BaseA{
public:
virtual void virt1()=0; //wird von BaseB nicht defininert
int virt2(); //wird von BaseB definiert
BaseB(); //BaseB besitzt sowohl Konstruktor
virtual ~BaseB(); //als auch Destruktor
};
class BaseC{
public:
virtual virt3()=0;
};
class Obj : public BaseB, BaseC{
//an erster stelle im vtable von Obj muss virt1 stehen (wird von Obj definiert)
//an zweiter stelle im vtable von Obj muss virt2 aus BaseB stehen (nicht von Obj definiert)
//Ab hier können sonstige Methoden/Konstruktoren in beliebiger Reihenfolge definiert sein.
};
Wie erreiche ich, dass eine Funktion, die ich nicht neu in einer abgeleiteten Klasse definieren will, an einer gewünschten Stelle im vtable steht?
Normalerweise werden die Funktionen doch in Reihenfolge der Definition im vtable aufgelistet, von Basisklassen definierte Methoden vornangehängt, oder nicht, wie dann?
Wenn ja - wie entscheidet sich, von welcher Basisklasse die Methoden zuerst eingetragen werden?
Bei Ersetzung von virtuellen Funktionen in einer Abgeleiteten Klasse, wird die Funktion an der Stelle eingetragen, an der sie auch im vtable der Basisklasse gestanden hätte?
Wie werden Funktionen zur Laufzeit aus dem vtable herausgesucht? Namensvergleich?
Haben rein virtuelle Klassen eigentlich auch einen vtable? Von ihnen kann ja sowieso kein Objekt erstellt werden.
Wenn eine virtuelle Methode in einer Basisklasse public war, eine Unterklasse mit private erbt, die Methode also private übernimmt, was passiert dann, wenn über einen Zeiger auf eine Instanz der Unterklasse die nun private Methode benutzt wird?
Zuletzt bearbeitet: