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



















,它们在只有一个派生类的单一继承是隐含调用的关系,你想想看,派生类的对象不就是一个基类的对象吗?想想“is a”的关系,派生类的对象产生时,在派生类对象的构造函数调用之时,记住,是“之时”,调用基类的构造函数,然后是派生类的初始成员列表,然后就是派生类的构造函数里的操作,就是这样。