c ++:双冒号和单冒号运算符

时间:2015-10-08 13:19:26

标签: c++ class

我正在研究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 ....

类型的对象

之前有人见过这样的事吗?

0 个答案:

没有答案