virtual 的作用就是在其派生类中只有一个共享的副本.
1.为什么添加virtual后就不能产生最后派生类的对象呢?从提示可以看出,是不能访问最基类的private访问层的构造函数(virtual base游戏规则:最基类的初始化,也就是构造函数的责任,交给最后派生类担任,明白了吧?)
所以单从实现上,完全可以将最后派生类声明成最基类的友员,从而实现顺利创建最后派生类的对象,就算是private virtual也没有问题,所以这不能从根本上实现不让派生的基类.
2.为什么去掉virtual后就能产生最后派生类的对象呢?是因为最基类的构造任务是交给直接派生类担任,而且直接派生类是最基类的友员,所以就很顺利的构造了.