1. /* 
  2. C++是很危险的:第一章 构造函数:第二节 构造函数与多态 
  3.  
  4. 《C++是很危险的》中的代码全部来自网络及各种C++相关的书籍。 
  5. 目的不是为了谴责C++,而是希望大家注意C++中的某些细节。 
  6. 这些细节在实际工程中根本用不到,所以大家就当笑话看看就好。 
  7.  
  8. 以下代码会输出什么? 
  9.  
  10. 操作系统:ubuntu linux 10.10 
  11. 编译器:g++ 4.4.5 
  12. 1、没有编译错误,能够正常运行。 
  13. 2、答案是3。 
  14.  
  15. 附注:Java在构造函数与多态这个问题上与C++采取了两种完全相反的做法。 
  16. 如果您用Java写一个类似的代码,输出的结果会是4,而在C++中,输出结果会是3。 
  17. */ 
  18.  
  19. #include <iostream> 
  20. using namespace std; 
  21. class Base 
  22. public
  23.     Base() 
  24.     { 
  25.         data=createNumber(); 
  26.     } 
  27.     int getData()const 
  28.     { 
  29.         return data; 
  30.     } 
  31. protected
  32.     virtual int createNumber()const 
  33.     { 
  34.         return 3; 
  35.     } 
  36. private
  37.     int data; 
  38. }; 
  39.  
  40. class Derived : public Base 
  41. protected
  42.     virtual int createNumber()const 
  43.     { 
  44.         return 4; 
  45.     } 
  46. }; 
  47.  
  48. int main() 
  49.     Base *a=new Derived; 
  50.     cout<<a->getData()<<endl; 
  51.     return 0;