构造函数的一个小问题

来源:互联网 发布:网络游戏音乐视频 编辑:程序博客网 时间:2024/06/11 03:15

// 精简过的代码,两个构造函数如下:

simple_string::simple_string()
{
 str=new char[1];
 len=0;
 str[0]=NULL;
}

 

simple_string::simple_string(int n)
{
 len=n;
 str=new char[len+1];
 for(int i=0;i<n;i++) str[i]='0';
 str[len]=NULL;
}

 

// 一个赋值操作符

simple_string& simple_string::operator =(char c)
{
    len = 1;
    delete[] str;
    str = new char[2];
    str[0] = c;
    str[1] = 0;

 return *this;
}

 

如果我这样调用:

      simple_string s0 = 'a';
    cout << endl << "s0 = "<< s0 << "|||" << endl;

打印出97个0, 在vc上调试发现调用的是simple_string::simple_string(int n)构造函数

 

如果这样调用:

      simple_string s0;
      s0 = 'a';
    cout << endl << "s0 = "<< s0 << "|||" << endl;

则调用赋值操作,输出为 a


开始很纳闷,于是翻书补课,发现如果在定义时给变量赋初值,此时的赋值操作实际上是初始化操作,即调用构造函数而非赋值操作符(见C++ Primer 2.2.3)。

根据C语言定义,'a'为int类型,因此调用的是simple_string::simple_string(int n)构造函数。

0 0