// 精简过的代码,两个构造函数如下:
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)构造函数。