最初に2つのコードがあります:
#include<iostream>
using namespace std;
class A{
public:
virtual void f()
{
cout<<"A"<<endl;
}
};
class B: public A{
public:
virtual void f()
{
cout<<"B"<<endl;
}
};
int main()
{
A* pa=new A();
B* pb=new B();
A* upCastpa= static_cast<A*>(pb);
B* downCastpb=static_cast<B*>(pa);
upCastpa->f();
downCastpb->f();
return 1;
}
1つのディスプレイ
B
A
したがって、本当に重要なのは、ポインタが指しているオブジェクトに反対していることだと思います。ただし、次のように仮想フォームA :: f()を削除すると、
#include<iostream>
using namespace std;
class A{
public:
void f()
{
cout<<"A"<<endl;
}
};
class B: public A{
public:
virtual void f()
{
cout<<"B"<<endl;
}
};
int main()
{
A* pa=new A();
B* pb=new B();
A* upCastpa= static_cast<A*>(pb);
B* downCastpb=static_cast<B*>(pa);
upCastpa->f();
downCastpb->f();
return 1;
}
コードは「停止」と表示されます何が起こったのですか?重要なことは、ポインタが指しているオブジェクトに反対している場合。
破損ではなくABを表示することを想定しています。
どうした?
アドバイスや指示をいただければ幸いです。どうもありがとう。