Heim > Backend-Entwicklung > C#.Net-Tutorial > Zusammenfassung der wichtigsten Punkte der C++-Überprüfung 11 – Polymorphismus (2)

Zusammenfassung der wichtigsten Punkte der C++-Überprüfung 11 – Polymorphismus (2)

黄舟
Freigeben: 2017-01-16 11:53:36
Original
1225 Leute haben es durchsucht

1 Können virtuelle Funktionen im Konstruktor aufgerufen werden, um Polymorphismus zu erreichen

1) Wann wird der VPTR-Zeiger im Objekt initialisiert?

Wenn das Objekt erstellt wird, wird der VPTR-Zeiger vom Compiler initialisiert

Das Zeigen von VPTR wird erst abgeschlossen, nachdem die Konstruktion des Objekts vollständig abgeschlossen ist

Der Zeiger des übergeordneten Klassenobjekts VPTR zeigt auf die virtuelle Funktionstabelle der übergeordneten Klasse

VPTR des untergeordneten Klassenobjekts zeigt auf die virtuelle Funktionstabelle der untergeordneten Klasse

class Parent
{ public:
Parent(int a=0)//执行时此时的调用的print函数仍然是父类的函数(此时会将vptr指针指向父类的虚函数表)
{
this->a = a;
print();
}
virtual void print() 
{ 
cout<<"我是爹"<<endl; 
}
private:
int a;
};
class Child : public Parent
{ public:
Child(int a = 0, int b=0):Parent(a)//先执行父类构造器,执行完之后返回子类(vprt指针指回子类虚函数表)
{
this->b = b;
print();
}
virtual void print()
{
cout<<"我是儿子"<<endl;
}
private:
int b;
};
void HowToPlay(Parent *base)
{
base->print(); //有多态发生 //2 动手脚 
}
void main()
{
Child c1; //定义一个子类对象 ,在这个过程中,在父类构造函数中调用虚函数print 能发生多态吗?
system("pause");
return ;
}
Nach dem Login kopieren

Zusammenfassung der wichtigsten Punkte der C++-Überprüfung 11 – Polymorphismus (2)

Zweiter Elternteil Wenn die Schrittgröße des Klassenzeigers nicht mit der Schrittgröße des Unterklassenzeigers übereinstimmt

class Parent
{
public:
Parent(int a=0)
{
this->a = a;
}
virtual void print() 
{
cout<<"我是爹"<<endl;
}
private:
int a;
};
//成功 ,一次偶然的成功 ,必然的失败更可怕
class Child : public Parent
{
public:
/*
Child(int a = 0, int b=0):Parent(a)
{
this->b = b;
print();
}
*/
Child(int b = 0):Parent(0)
{
//this->b = b;
}
virtual void print()
{
cout<<"我是儿子"<<endl;
}
private:
//int b;
};
void HowToPlay(Parent *base)
{
base->print(); //有多态发生 //2 动手脚 
}
void main()
{
Child c1; //定义一个子类对象 ,在这个过程中,在父类构造函数中调用虚函数print 能发生多态吗?
//c1.print();
Parent *pP = NULL;
Child *pC = NULL;
Child array[] = {Child(1), Child(2), Child(3)};
pP = array;
pC = array;
pP->print();
pC->print(); //多态发生
pP++;
pC++;
pP->print();
pC->print(); //多态发生
pP++;
pC++;
pP->print();
pC->print(); //多态发生
cout<<"hello..."<<endl;
system("pause");
return ;
}
Nach dem Login kopieren

Zusammenfassung der wichtigsten Punkte der C++-Überprüfung 11 – Polymorphismus (2)

Das Obige ist ein Zusammenfassung der C++-Überprüfungspunkte 11 – Polymorphismus (2) ), bitte beachten Sie die chinesische PHP-Website (m.sbmmt.com) für weitere verwandte Inhalte!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage