在java中,函数缺省是虚函数,所以print()是一个虚函数,当构建一个b对象时,在调用父类c,a构造函数中的两次对print()的调用其实是对b类定义的print()的调用。所以会输出bbb,bbb.
在c++中,函数缺省不是虚函数,定义虚函数需要加上virtual。所以当构建一个b对象时,在调用父类c,a构造函数中的两次对print()的调用是对类a,c本身定义的print()进行调用,所以输出是ccc,aaa.
另外,构造函数的调用顺序是从基类到派生类的。
在c++中,函数缺省不是虚函数,定义虚函数需要加上virtual。所以当构建一个b对象时,在调用父类c,a构造函数中的两次对print()的调用是对类a,c本身定义的print()进行调用,所以输出是ccc,aaa.
另外,构造函数的调用顺序是从基类到派生类的。
但在C++中,当然也存在着动态和静态绑定的问题,
但是,在构造函数中不存在虚机制,永远都是本地化的调用,所以即使在print()前加上virtual的关键字,也会得到同样的结果的!
对于C++中的析构函数也是一样的,但是构造函数不允许为虚函数,而析构函数可以!