手机版
你好,游客 登录 注册
背景:
阅读新闻

读C++ Primer 之构造函数陷阱

[日期:2011-08-08] 来源:Linux社区  作者:xizero00 [字体: ]

读C++ Primer 之构造函数陷阱

  1. /* 
  2. * author:xizero00 
  3. * mail: xizero00@163.com 
  4. * date:2011-08-07 21:00:59 
  5. * constructor trap 
  6. */   
  7.   
  8. #include <iostream>   
  9.   
  10. using namespace std;  
  11.   
  12.   
  13. class Base  
  14. {  
  15. public:  
  16.     //默认构造函数   
  17.     Base(): d( 0 ) {}  
  18.       
  19.     //带一个参数的构造函数   
  20.     Base( int val ) : d( val ) { cout << "基类构造函数: val = " << val << endl; }  
  21. public:  
  22.     int d;  
  23. };  
  24.   
  25.   
  26. class Inherit : public Base  
  27. {  
  28. public:  
  29.     //默认构造函数   
  30.     Inherit():Base() {}  
  31.       
  32.     //带一个参数的构造函数   
  33.     //在执行此构造函数的时候会调用基类的相应的构造函数   
  34.     //但是,问题就出在这个继承下来的d,它并没有被初始化,这里必须要注意!   
  35.     Inherit( int v ): Base( v + d ) { cout << "子类构造函数: v = " << v << " d = " << d << endl; }  
  36.       
  37.       
  38. };  
  39.   
  40.   
  41. int main( int argc , char **argv )  
  42. {  
  43.     Inherit i( 1 );  
  44.     return 0;  
  45. }  

将文件存为trap.cc

编译命令为:

  1. g++ trap.cc -o trap -g  

执行结果为:

  1. 基类构造函数: val = 12382197  
  2. 子类构造函数: v = 1 d = 12382197  
linux
相关资讯       C++ 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款