首页 > 代码库 > 读C++ Primer 之构造函数陷阱

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

/* 
* author:xizero00 
* mail: xizero00@163.com 
* date:2011-08-07 21:00:59 
* constructor trap 
*/   
  
#include <iostream>   
  
using namespace std;  
  
  
class Base  
{  
public:  
    //默认构造函数   
    Base(): d( 0 ) {}  
      
    //带一个参数的构造函数   
    Base( int val ) : d( val ) { cout << "基类构造函数: val = " << val << endl; }  
public:  
    int d;  
};  
  
  
class Inherit : public Base  
{  
public:  
    //默认构造函数   
    Inherit():Base() {}  
      
    //带一个参数的构造函数   
    //在执行此构造函数的时候会调用基类的相应的构造函数   
    //但是,问题就出在这个继承下来的d,它并没有被初始化,这里必须要注意!   
    Inherit( int v ): Base( v + d ) { cout << "子类构造函数: v = " << v << " d = " << d << endl; }  
      
      
};  
  
  
int main( int argc , char **argv )  
{  
    Inherit i( 1 );  
    return 0;  
}  
将文件存为trap.cc
编译命令为:
g++ trap.cc -o trap -g  
执行结果为:
基类构造函数: val = 12382197  
子类构造函数: v = 1 d = 12382197


本文出自 “落日余晖” 博客,请务必保留此出处http://whluwit.blog.51cto.com/2306565/1438160