关于如何用C++实现一个不可以被继承的类

很早以前在某个笔试题集里看到了这个题目,MS是Adobe公司出的。当时第一反应要用到什么私用化构造函数,友元之类的技术,但后来实现的时候却发现更多的问题,现在已经一一搞明白了。今天记在这,总结一下。

主要的代码:

几个要点:

  1. 在NoDeriveBase这个类里是不能直接写,friend class T的,编译器(gcc)会报错。所以要用Type2Type的技术,Loki库里常用的技术。
  2. 为什么A要虚继承自NoDeriveBase?原因是A虚继承后,B再继承A时,B要直接访问虚基类的构造函数,而不是直接通过A的构造再访问NoDeriveBase的构造。所以,如果不虚继承的话,B是可以继承A的。
  3. 这段代码会编译出错。B是不可以继承A的。

终于都明白了! 🙂

发表评论

电子邮件地址不会被公开。 必填项已用*标注