unterhalb der Linie Betrachten Code vonwarum dieser Wert Zeiger nach dem Hinzufügen virtuelles Schlüsselwort in C++ geändert
#include<iostream>
using namespace std;
class base
{
int i;
public:
void printb()
{
cout << "This pointer of base "<<this<<endl;
}
};
class derived: public base
{
int i;
public:
void printd()
{
cout << "This pointer of derived "<<this<<endl;
}
};
main()
{
derived d1;
d1.printd();
d1.printb();
}
Nachdem mit g Kompilieren ++ (4.8.4) in Maschinen Ergebnis 64bit ubuntu ist
This pointer of derived 0x7ffe74697ac0
This pointer of base 0x7ffe74697ac0
Per mein Verständnis sowohl Basis und abgeleitet dieser Zeiger wird gleich sein, da wir mit einzelnen Objekt aufrufen. I hinzugefügt virtuelles Schlüsselwort printd() Funktion der abgeleiteten Klasse, wie unten
#include<iostream>
using namespace std;
class base
{
int i;
public:
void printb()
{
cout << "This pointer of base "<<this<<endl;
}
};
class derived: public base
{
int i;
public:
virtual void printd()
{
cout << "This pointer of derived "<<this<<endl;
}
};
main()
{
derived d1;
d1.printd();
d1.printb();
}
Ausgabe des obigen Codes ist, wie unten
This pointer of derived 0x7ffee969b1d0
This pointer of base 0x7ffee969b1d8
Hier Dieser Zeigerwert in abgeleitet und Base unterschiedlich ist auch wenn mit einem einzelnen Objekt aufrufen.Jede Zeit, die ich das Programm ausführen gibt es einen Unterschied von 1byte zwischen dieser Zeiger und Basis dieser Zeiger. Kann jemand sagen, warum dieser Unterschied in diese Zeiger und wie virtuelle Stichwort diese Zeiger beeinflussen.
Es ist nicht 1 Byte, es ist eine ganze 8 von ihnen. Die Anzahl der Bytes eines Zeigers auf Ihrer Plattform. – StoryTeller
Weil Sie den Compiler gezwungen haben, eine virtuelle Funktionstabelle zu erstellen. – EJP