我正在尝试为公司创建一个广泛的数据库。我为每个级别的员工开设了不同的课程。但是我不明白如何在单个地图中推送不同类型的对象。
据我尝试,它只是被推入,至少到目前为止没有任何编译错误。
class EmployeeClass
{}
class CEOClass: public EmployeeClass
{}
class ManagerClass:public EmployeeClass
{}
class EngineerClass: public EmployeeClass
{}
int main()
{
EngineerClass engineerClassObject;
std::map<std::string employeeName, EmployeeClass> employeeMap;
employeeMap.insert({employeeName, enginerrClassObject});
}
我想知道我是否可以这样做。如果不是,什么是不添加额外地图的最佳方法。如果是,怎么可能,它如何运作?
答案 0 :(得分:0)
当您具有对基础对象的引用/指针时,虚拟多态性就会启动。
$ git push http://example.com/repo.git
然后
EmployeeClass *engineerClassObject = new EngineerClass();
std::map<std::string, EmployeeClass*> employeeMap;
employeeMap.insert({employeeName, engineerClassObject});
答案 1 :(得分:0)
您可以使用指针或引用。
这里有一个带有指针和std::pair
的示例。
int main()
{
EngineerClass engineerClassObject;
std:string employeeName = "Peter";
std::map<std::string employeeName, EmployeeClass*> employeeMap;
employeeMap.insert(std::pair<std::string,EmployeeClass*>(employeeName, &enginerrClassObject));
}
编辑:
示例参考:
int main()
{
EngineerClass engineerClassObject;
std:string employeeName = "Peter";
std::map<std::string employeeName, EmployeeClass&> employeeMap;
employeeMap.insert(std::pair<std::string,EmployeeClass&>(employeeName, enginerrClassObject));
}
答案 2 :(得分:0)
您应该存储指针,它们最好是聪明的。例如:
std::map<std::string, std::unique_ptr<EmployeeClass>> employeeMap;
employeeMap.insert({"Engineer", std::make_unique<EngineerClass>()});
或
std::map<std::string, std::unique_ptr<EmployeeClass>> employeeMap;
auto engineer = std::make_unique<EngineerClass>()
employeeMap.insert({"Engineer", std::move(engineer)});