基本クラスがvirtualなら十分でそれ以降は任意だったと思うがドキュメントが出てこない。
継承が深くなるとvirtualかどうか確認するのにいくつもヘッダーファイルを遡ることになるから、
overrideしたところにもvirtualがあるとわかりやすい。
いま基本クラスと書いたが途中からvirtualっていうのもありなんだよな。
#include <iostream>
using namespace std;
class A { public: void Say() { cout << "hello A" << endl; }};
class B : public A { public: virtual void Say() { cout << "hello B" << endl; }};
class C : public B { public: void Say() { cout << "hello C" << endl; }};
int main(){
 A *a = new C(); a->Say();
 B *b = new C(); b->Say();
 return 0;}
結果
hello A
hello C