1

我正在阅读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 关键字来实现“密封”类效果。如果我删除 virtual 关键字,则它没有“密封”效果。为什么?

4

1 回答 1

1

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

于 2010-12-28T11:13:19.357 回答