我正在研究c ++代码的一部分。我有一个名为efacm.h的头文件和一个名为efacm.cpp的相应cpp文件。 efacm.h文件是这样的:
#include "al.h"
#include "bl.h"
#include "cl.h"
#include <map>
#include <string>
class efacm
{
public:
efacm();
virtual ~efacm();
void init();
efacm* getcom(std::string acmdstr);
private:
typedef std::map<std::string, efacm*> com_map;
com_map mcom;
al al; // the first al is a class name which is defined in al.h
bl bl; // same as al
cl cl; // same as al
}
然后efacm.cpp就像:
#include "efacm.h"
efacm::efacm()
: mcom()
, al()
, bl()
, cl()
{} // I DO NOT understand this part!
efacm::~efacm() {}
void efacm::init()
{
mcom["a"] = &al; // I also DO NOT understand this part, why mcom is a vector?
mcom["b"] = &bl;
mcom["c"] = &cl;
}
efacm* efacm::getcom(std::string acmdstr)
{
com_map::iterator pos=mcom.find(acmdstr);
return (pos == mcom.end()) ? NULL : pos->second;
}
正如我在我的代码中所提到的,有两部分我不太了解。第一个是关于
efacm::efacm()
: mcom()
, al()
, bl()
, cl()
{}
结构看起来像class :: object():#something here#{object body}。但是如何解释这种结构呢?双结肠和单结肠在这里意味着什么?
我不明白的第二件事是:
void efacm::init()
{
mcom["a"] = &al;
mcom["b"] = &bl;
mcom["c"] = &cl;
}
为什么mcom是一个向量?似乎com_map不是矢量类型,但mcom是com_map ....
类型的对象之前有人见过这样的事吗?