class Base1
{
private:
int testInput;
public:
Base1();
virtual int GetRow(void) = 0;
};
Base1::Base1()
{
testInput = 0;
}
class table : public Base1
{
private:
int row;
public:
table();
virtual int GetRow(void);
};
table::table()
{
//Contructor
row = 5;
}
int table::GetRow()
{
return row;
}
int main()
{
Base1* pBase = new table[3];
pBase[0].GetRow();
pBase[1].GetRow(); //when i get to this line, the compiler keep saying access
// violation.
pBase[2].GetRow();
return 0;
}
Ich versuche, ein Array von 3 Tabellenklasse zu erstellen. Die Voraussetzung ist, dass ich das Base-Objekt dazu verwenden muss.Wie erstellt man ein Array mit Polymorphismus in C++?
Base1 * pBase = new table[3];
gut für mich aussehen. Aber als ich versuchte, auf jede Tabelle zuzugreifen, sagte der Compiler, es sei Zugriffsverletzung. Ich weiß nicht, was mit diesem Code falsch ist. Ich verwende jedoch Visual Studio 2010.
und, shhh .. aber Casting auf den richtigen Typ, und dann Aufruf der Methode auf dem Gusstyp verhindert den Absturz – johnathon
Sie meinen '((Tabelle) pBase) [1] .GetRow()'? Das wird funktionieren, aber es ist eine * schreckliche * Sache zu tun und wird mit ziemlicher Sicherheit zurückkommen und dich in den Arsch beißen. –
ja ich meine genau das. Ja, es ist ziemlich "schrecklich", aber es ist eine ziemlich gute Möglichkeit, den Compiler dazu zu bringen, auf die polymorphen Objekte an den richtigen Adressen zuzugreifen. – johnathon