密封类实现查询

时间:2010-12-28 11:10:00

标签: c++ class virtual sealed

我正在阅读http://www2.research.att.com/~bs/bs_faq2.html上的C ++常见问题解答,当我遇到这个代码来实现'密封'类时:

class Base{
    public:
      friend class A;
    private:
      Base(){cout<<"Base constructor called";}
};

class A : public virtual Base{
   public:
     A(){cout<<"A const called";}
};

class B : private A{};

int main(){
  A a;
  //B b;
  return EXIT_SUCCESS;
}

我不明白如何通过使用virtual关键字来实现'密封'类效果。如果我删除虚拟关键字,那么它没有“密封”效果。为什么呢?

1 个答案:

答案 0 :(得分:1)

它的工作原理是因为虚拟继承的工作方式,B必须构造Base-它不能,因为Base的构造函数是私有的。只有A可以构建Base。在正常继承中,B构造A,构造Base,这很好,因为A可以构造Base,B可以构造A。