【发布时间】:2014-01-13 07:28:45
【问题描述】:
#include <string.h>
#include <iostream>
using namespace std;
class String
{
public:
/* Parameterized Constructor */
String(const char* i_ac)
{
cout<<"Parameterized Constructor";
if(i_ac)
{
data = new char [strlen(i_ac) + 1];
strcpy(data,i_ac);
}
else
{
data = new char[1];
*data = '\0';
}
}
//Parametrized constructor ends.
/*Copy Constructor */
String ( String& objTemp )
{
cout<<"Copy Constructor";
data = new char[strlen(objTemp.data) + 1];
strcpy(data,objTemp.data);
}
/*Overloaded Assignment Operator */
String operator=(String& objTemp)
{
if(this == &objTemp)
return objTemp;
//Delete Existing data
delete[] data;
data = new char[strlen(objTemp.data)+ 1];
strcpy(data,objTemp.data);
return *this;
}
friend ostream& operator<<(ostream& out, String& s1);
private :
char* data;
};
ostream& operator<<(ostream& o1, String& s1)
{
o1<<s1.data;
return o1;
}
int main()
{
String s1("Hello");
cout<<"s1"<<s1;
String s2 = s1;
cout<<"\ns2"<<s2;
String s3(); //doubt
cout<<"\ns3"<<s3;
}
在调用String s3() 时,不会调用构造函数(我知道,因为我在每个构造函数中打印)。但是,在下一行打印 s3 会输出 1。
为什么不调用构造函数?我怎样才能确保有人调用?
【问题讨论】:
-
不是错误的原因,但您确实应该传递
const String&。 -
字符串 s3();我认为被视为函数声明。这就是为什么不调用构造函数的原因。如果你删除 (),你最终会调用不带参数的构造函数,它不存在。
标签: c++ string c++11 constructor