原文出自:http://blog.csdn.net/hihui/article/details/8604779

  1. #include <stdio.h>
  2. class Base
  3. {
  4. public:
  5. int i;
  6. Base()
  7. {
  8. i = 99;
  9. amethod();
  10. }
  11. virtual void amethod()
  12. {
  13. printf("Base.amethod()\n");
  14. }
  15. };
  16. class Derived : public Base
  17. {
  18. public:
  19. int i;
  20. Derived() {
  21. i = -1;
  22. }
  23. virtual void amethod()
  24. {
  25. printf("Derived.amethod()\n");
  26. }
  27. };
  28. int main(int argc, char *argv[])
  29. {
  30. Base *b = new Derived();
  31. printf("%d\n",b->i);
  32. b->amethod();
  33. }

其输出结果为:

Base.amethod()
99
Derived.amethod()

同样的java代码

  1. class Base
  2. {
  3. int i = 99;
  4. public void amethod()
  5. {
  6. System.out.println("Base.amethod()");
  7. }
  8. Base()
  9. {
  10. amethod();
  11. }
  12. }
  13. class Derived extends Base
  14. {
  15. int i = -1;
  16. public void amethod()
  17. {
  18. System.out.println("Derived.amethod()");
  19. }
  20. public static void main(String argv[])
  21. {
  22. Base b = new Derived();
  23. System.out.println(b.i);
  24. b.amethod();
  25. }
  26. }

其输出结果为

Derived.amethod()
99
Derived.amethod()

差异体现在第一行输出;

这行是在Derived的构造函数中输出的,Derived本身没有构造函数,它只调用父类的构造函数,即Base的amethod();

对于C++代码,执行的是Base::amethod();

对于Java代码,执行的是Derived::amthod();

为什么呢,在C++中调用基类的amethod时,此时子类还没有准备好,故执行的是基类的amethod.

最新文章

  1. WireShark网络性能分析
  2. vim下打造python编辑器
  3. HTML 学习笔记 CSS样式(边框)
  4. kafka2.9.2的伪分布式集群安装和demo(java api)测试
  5. C语言 数组 行优先 实现
  6. dp核心问题研究-从入门到放弃
  7. PLSQL_性能优化系列15_Oracle Explain Plan解析计划解读
  8. USB Type-C 连接器规范推出之后,市场很多低质量线材容易损坏设备
  9. XML1_XML基础
  10. IP、路由配置
  11. POJ 3691 &amp;amp; HDU 2457 DNA repair (AC自己主动机,DP)
  12. NYOJ 745 蚂蚁问题(两)
  13. svn conflicts: local delete, incoming delete upon update
  14. 关于 SVN 项目检出
  15. 走进Vue时代进阶篇(01):重构电商购物车模块
  16. [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法
  17. 【刷题】BZOJ 4316 小C的独立集
  18. javascript之QUnit单元测试
  19. 洛谷P2059 卡牌游戏 [JLOI2013] 概率dp
  20. ppp协议介绍(转)

热门文章

  1. C# BS方向 该如何规划学习?【学习路线指南】
  2. windows安装Laravel框架经验心得(一)
  3. 【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 获取Azure AD的Access Token的两种方式
  4. Mysql数据量较大时分页查询优化
  5. 第二十九篇 -- UDP和TCP
  6. 什么是ETL--ETL定义、过程和工具选型思路
  7. JS_点击事件_弹出窗口_自动消失
  8. 线性反馈移位寄存器(LFSR)
  9. Java 中节省 90% 时间的常用的工具类
  10. Drupal &lt; 7.32 “Drupalgeddon” SQL注入漏洞(CVE-2014-3704)