C++では、基本クラスの性質を受け継ぐ派生クラスを作ることができます。
クラスの性質を受け継ぐことをC++では継承と呼びます。
例えば、基本クラスとして動物クラスを作る場合を考えましょう。動物には鳴き声があるので、鳴き声の関数cry()を作ったとします。そして、cry()では「ガォ」と鳴くように定義したとします。次に、動物クラスを受け継ぐ「犬」クラスを作ります。犬クラスは動物クラスを受け継いだ(継承した)わけですから、関数cry()も継承します。しかし、犬には「ワン」と鳴いて欲しいので、関数cry()を上書きして「ワン」と書き直します。ところが、このまま実行しても「ワン」でなく「ガォ」と鳴きます。C++では派生クラスの中で関数を上書きしても、基本クラスの性質が残ってしまうのです。一方、Javaでは上書きできます。
そこで登場するのが仮想関数です。仮想関数を使うと、C++でも基本クラスの関数を派生クラスの中で上書きできるのです。仮想関数を使うためには、基本クラス内で、後から上書きしたい関数の前にvirtual と書きます。これで派生クラスの中から上書きできます。仮想関数の仮想とは「仮の関数」という意味で「後から正式に定義しますよ」という意味なのです。なお、関数を上書きすることを、C++やJavaではオーバーライドと呼びます。