好吧,我是C++的新手,我一直在练习构造函数。我正在创建一个坏版本的String
类,并被要求执行下一个任务:
a) 创建一个构造函数,在其中可以进行从const char*
到String
的转换。
b) 使用const char*
中的"n"个第一个字母创建构造函数。如果'n'比此const char*
长,则此const char*
的副本将被写入为String
。如果"n=0",程序将写入一个空的String
。
我认为我在执行它们时没有遇到任何问题;这就是我的
Cadena::Cadena(const char* cad){
tam_ = strlen(cad);
s_ = new char[tam_ + 1];
strcpy(s_,cad);
}
Cadena::Cadena(const char* cad, unsigned lon){
tam_ = lon;
s_ = new char[tam_ + 1];
for(unsigned i = 0; i < tam_; i++){
s_[i] = cad[i];
}
s_[tam_] = ' ';
}
当我试图在我的主方法中测试它们时,我的问题来了,在那里我得到了这个错误:"c1是模糊的"。
我试着用一个伪参数来实现这一点(将我的unsigned
参数声明为头中没有名称的int
),但我想将第二个参数初始化为0,我不能用伪参数来完成这一点。
我知道编译器不知道必须使用哪个构造函数,但我想以某种方式做到这一点。有人能帮我吗?抱歉我英语不好。
我正在创建一个糟糕版本的String类。。。
否否。这从来都不是你应该做的事情。你说你是c++的初学者,这并不意味着你会写"糟糕"的代码,也许它很天真,很长,语法不好,不是最好的解决方案,但这并不会让它变得"糟糕"。此外,如果你真的认为你的字符串类"不好",我建议你重做。你正在学习,不要故意编写你知道低于标准的代码。你现在的编码方式将影响你将来如何写"更好"的代码,即使你认为不会。
因此,为了你的利益和未来使用你的代码的人,请永远不要试图逃脱"坏"代码的惩罚。干杯
实际上,您只需要一个构造函数。另外,您在两个函数中所做的基本上是相同的,所以如果您真的想要两个函数,您可以从另一个函数中调用一个。您可以使用Cadena::Cadena(const char*cad,unsigned lon),而不是使用两个独立的Cadena:(const char*cad)和Cadena:。
所以构造函数将是
Cadena::Cadena(const char* cad, unsigned int lon = 0) {
tam_ = (lon > 0 ? lon: strlen(cad));
s_ = new char[tam_ + 1];
strcpy(s_, cad);
s_[tam_] = ' ';
}
您的主/测试程序可以这样调用。
int main()
{
char s[] = "Hello";
Cadena c(s);
return 0;
}