私は仮想キーワードと継承の概念をC++でテストしています。 私は小さなプログラムを書かれている:私はここでやっていること子クラスの仮想関数のオーバーロード
#include<stdio.h>
#include<iostream>
using namespace std;
class cna_MO
{
public:
virtual void print()
{
cout << "cna_MO" << endl;
}
};
class cna_bsc:public cna_MO
{
public:
void print()
{
cna_MO::print();
}
void print(int a)
{
cout << "cna_BSC" << endl;
}
};
class cna_Mo
{
cna_MO *_mo;
public:
cna_Mo()
{
_mo = new cna_bsc;
}
virtual void print(int a)
{
cout << "cna_Mo with arg" << endl;
_mo->print(5);
}
virtual void print()
{
cout << "cna_Mo" << endl;
_mo->print();
}
};
int main()
{
cna_Mo valid_mo;
cout << "old case is started" << endl;
valid_mo.print();
cout << "new case is started" << endl;
valid_mo.print(5);
return 0;
}
は、私は子クラスに親クラスの仮想関数をオーバーロードしています!これは正しいことではありませんか?
私は以下のようにコンパイルエラーを取得しています:
"temp10.cc", line 45: Error: Too many arguments in call to "cna_MO::print()".
本当に 'stdio'が必要な場合(あなたが指定したコードでは必要ありません)、' 'stdio.h'ではなく' cstdio'をインクルードする必要があります(http://stackoverflow.com)。/questions/301586/what-is-the-the-difference-using-includeファイル名とファイル名-h)。 –
また、cna_Moコンストラクタで割り当てるポインタを決して削除しないでください。 –