仮想キーなしで派生クラスのメンバー関数に到達する方法を教えてください。仮想キーワードを避ける方法
#include<iostream>
using namespace std;
class Employee{
public:
void what(){
cout<<"Employee"<<endl;
}
};
class Secretary:public Employee{
public:
void what(){
cout<<"Secretary"<<endl;
}
};
class Manager:public Employee{
public:
void what(){
cout<<"Manager"<<endl;
}
};
class Director:public Manager{
public:
void what(){
cout<<"Director"<<endl;
}
};
void f(Employee*);
int main(){
Employee a;
Manager b;
Director c;
Secretary d;
f(&a);
f(&b);
f(&c);
f(&d);
return 1;
}
void f(Employee *a){
a->what();
}
"Employee"が常に出力されます。私は各オブジェクトのクラスの名前を印刷したい。 とa.what()はクラス名を正しく出力します。しかし、私はポインタとf(Employee *)関数をこの割り当てに使用する必要があります。
あなたがそれを入力する内容に、各タイプに識別子を置くことができますが従業員= 1、マネージャー= 2、ディレクター= 3です。 「タグ付き発送」と呼ばれるものもあります。https://crazycpp.wordpress.com/2014/12/15/tutorial-on-tag-dispatching/ – xaxxon
できません。仮想関数は**派生クラスが存在する唯一の理由です。仮想関数を使用すべきではないとあなたの任務は言いますか?もしそうなら、脱落する。 –
テンプレートを使用して静的ディスパッチを使用できます。それは許されますか? –