Invoking virtual method in constructor: difference between Java and C++

In Java: class Base { public Base() { System.out.println("Base::Base()"); virt(); } void virt() { System.out.println("Base::virt()"); } } class Derived extends Base { public Derived() { System.out.println("Derived::Derived()"); virt(); } void virt() { System.out.println("Derived::virt()"); } } public class Main { public static void main(String[] args) { new Derived(); } } This will output Base::Base() Derived::virt() Derived::Derived() Derived::virt() However, in C++ the result is different: Base::Base() Base::virt() // ← Not Derived::virt() Derived::Derived() Derived::virt() (See http://www.parashift.com/c++-faq-lite/calling-virtuals-from-ctors.html for C++ code) What causes such a difference between Java and C++? Is it the time when vtable is initialized? **EDIT:** I do understand Java and C++ mechanisms. What I want to know is the insights behind this design decision.

以上就是Invoking virtual method in constructor: difference between Java and C++的详细内容,更多请关注web前端其它相关文章!

赞(0) 打赏
未经允许不得转载:web前端首页 » JavaScript 答疑

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏