のclass A
基本クラスとして がありclass B
ます。
以下で説明するように、仮想関数内で非仮想関数を呼び出しました。abc()
xyz()
ランタイム ポリモーフィズムにより、B:xyz
が呼び出されます – これは理解しています。
ただし、非仮想関数のように、なぜその後にB:abc
and notが続くのかわかりません。A:abc
abc
注意: 次の質問に出くわしました:非仮想関数を呼び出す仮想関数。仮想関数内での呼び出しabc()
は と同等this->abc()
であり、したがって出力であることが言及されています。ただし、この部分を理解しているかどうかはわかりません。
反対のことを行うと(つまり、仮想関数を呼び出す非仮想関数)、その時間に正確なランタイムポリモーフィズムが表示されるためです。その場合、this ポインターはどうなりますか?
//Virtual function calling non-virtual
class A
{
public:
void abc()
{
cout<<"A:abc"<<endl;
}
virtual void xyz()
{
cout<<"A:xyz"<<endl;
abc();
}
};
class B: public A
{
public:
void abc()
{
cout<<"B:abc"<<endl;
}
void xyz()
{
cout<<"B:xyz"<<endl;
abc();
}
};
int main() {
A *obj3 = new B;
obj3->xyz();\
return 0;
}
Output
B:xyz
B:abc
//Non-virtual calling virtual function
#include <iostream>
using namespace std;
class A
{
public:
void abc()
{
cout<<"A:abc"<<endl;
xyz();
}
virtual void xyz()
{
cout<<"A:xyz"<<endl;
}
};
class B: public A
{
public:
void abc()
{
cout<<"B:abc"<<endl;
xyz();
}
void xyz()
{
cout<<"B:xyz"<<endl;
}
};
int main() {
A *obj3 = new B;
obj3->abc();
return 0;
}
Output
A:abc
B:xyz