私は仮想関数について学んでいて、以下のプログラムの結果と非常に混乱しています。両方とも「hello from B」を返すことを望んでa1.virFun(b1)
いb1.virFun(b1)
ましたが、プログラムは「hellofromA」を返します。これは私の理解に反しています。b1.sayHello()
b1を引数として渡してb1.sayHello()
仮想関数であるのに、なぜ呼び出されないのか説明してください。
#include<iostream>
using namespace std;
class A
{
public:
virtual void sayHello();
void virFun(A obj);
};
class B : public A
{
public:
void virFun(A obj);
virtual void sayHello();
};
void A::sayHello()
{
cout << "hello from A" << endl;
}
void B::sayHello()
{
cout <<"hello from B" << endl;
}
void A::virFun(A obj)
{
obj.sayHello();
}
void B::virFun(A obj)
{
obj.sayHello();
}
int main()
{
A a1;
B b1;
a1.virFun(b1);
b1.virFun(b1);
return 0;
}