c – 你能创建一个继承类的std :: map吗?
发布时间:2020-12-16 09:39:29 所属栏目:百科 来源:网络整理
导读:我想知道是否可以创建一个继承类指针的映射.这是我正在尝试做的一个例子: #include string#include mapusing namespace std;class BaseClass{ string s;};class Derived1 : public BaseClass{ int i;};class Derived2 : public Derived1{ float f;};// Here
我想知道是否可以创建一个继承类指针的映射.这是我正在尝试做的一个例子:
#include <string> #include <map> using namespace std; class BaseClass { string s; }; class Derived1 : public BaseClass { int i; }; class Derived2 : public Derived1 { float f; }; // Here's what I was trying,but isn't working template<class myClass> map<string,myClass>m; int main() { // Add BaseClasses,Derived1's,and/or Derived2's to m here return 0; } 我得到的错误是: main.cpp(23): error C2133: 'm' : unknown size main.cpp(23): error C2998: 'std::map<std::string,myClass>m' : cannot be a template definition 我明白为什么我会收到这个错误,但我想知道是否可以创建一个可以容纳不同级别的继承类的地图?如果没有,是否有可能创建一种可以容纳各种类型的管理系统?或者我是否必须制作不同的地图/矢量/数组/等.对于每种类型的课程? 解决方法
是的,您可以在地图中存储继承的类,但指向它们,而不是对象本身.这是一个简短的例子(缺少对指针的内存管理)
#include <iostream> #include <string> #include <map> #include <utility> using namespace std; class BaseClass { string s; public: BaseClass() { s = "BaseClass";} virtual void print() { cout << s << std::endl; } }; class Derived1 : public BaseClass { int i; public: Derived1() { i = 10; } void print() { cout << i << std::endl; } }; class Derived2 : public Derived1 { float f; public: Derived2() { f = 4.3;} void print() { cout << f << std::endl; } }; int main() { map<string,BaseClass*>m; m.insert(make_pair("base",new BaseClass())); m.insert(make_pair("d1",new Derived1())); m.insert(make_pair("d2",new Derived2())); m["base"]->print(); m["d1"]->print(); m["d2"]->print(); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |