Wie kann ich abgeleitete Klasse Mitgliedsfunktion ohne virtuellen Schlüssel erreichen.Wie vermeidet man das virtuelle Schlüsselwort
#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();
}
Es druckt immer "Mitarbeiter". Ich möchte den Klassennamen jedes Objekts drucken. und a.what() druckt den Klassennamen korrekt. Aber ich muss Zeiger und f (Mitarbeiter *) Funktion für diese Aufgabe verwenden.
Sie eine Kennung es in jeder Art, wie, welche Art setzen kann:
Sie eine Vorlage statt Schreiben Sie die vier Kopien verwenden könnte ist .. Mitarbeiter = 1, Manager = 2, Direktor = 3 und schalten Sie das ein. Es gibt auch etwas namens "getagged Versand" https://crazycpp.wordpress.com/2014/12/15/tutorial-on-tag-dispatching/ – xaxxon
Sie können nicht. Virtuelle Funktionen sind ** der einzige Grund, warum abgeleitete Klassen existieren. Beschreibt Ihre Aufgabe, dass Sie keine virtuellen Funktionen verwenden sollten? Wenn ja, fallen Sie aus. –
Sie könnten den statischen Versand mit Vorlagen verwenden. Ist das erlaubt? –