在java中,函数缺省是虚函数,所以print()是一个虚函数,当构建一个b对象时,在调用父类c,a构造函数中的两次对print()的调用其实是对b类定义的print()的调用。所以会输出bbb,bbb.
在c++中,函数缺省不是虚函数,定义虚函数需要加上virtual。所以当构建一个b对象时,在调用父类c,a构造函数中的两次对print()的调用是对类a,c本身定义的print()进行调用,所以输出是ccc,aaa.
另外,构造函数的调用顺序是从基类到派生类的。

解决方案 »

  1.   

    就是动态绑定和静态绑定的问题啦。java中在执行print()时才绑定到对象,所以都是调b的print()。
      

  2.   

    在java中的情况楼上的老兄们已经说得很清楚了!
    但在C++中,当然也存在着动态和静态绑定的问题,
    但是,在构造函数中不存在虚机制,永远都是本地化的调用,所以即使在print()前加上virtual的关键字,也会得到同样的结果的!
    对于C++中的析构函数也是一样的,但是构造函数不允许为虚函数,而析构函数可以!