C++のvirtualについて

C++の仮想関数(virtual)について忘れっぽいので、備忘しておく

コード1(virtualが付かない場合)


#include

using namespace std;

class CBase
{
public:
void print(){ cout << "CBase::print" << endl; }
};

class CChild : public CBase
{
public:
void print(){ cout << "CChild::print" << endl; }
};

int main()
{
CBase base;
base.print();

CChild child;
child.print();

CBase* base2 = &child;
base2->print();

return 0;
}

コード2(virtualが付く場合)


#include

using namespace std;

class CBase
{
public:
virtual void print(){ cout << "CBase::print" << endl; }
};

class CChild : public CBase
{
public:
void print(){ cout << "CChild::print" << endl; }
};

int main()
{
CBase base;
base.print();

CChild child;
child.print();

CBase* base2 = &child;
base2->print();

return 0;
}

コード1の実行結果
CBase::print
CChild::print
CBase::print


コード2の実行結果
CBase::print
CChild::print
CChild::print


Javaは全ての関数にvirtualが付くらしいから、C++でも有無を言わさずつけるべき????


備考:昔参考にしたURL