[英]Ambiguous constructor
好吧,我是 C++ 的新手,我正在练习构造函数。 我正在创建一个错误版本的String
类,我被要求执行下一个任务:
a) 创建一个构造函数,您可以在其中进行从const char*
到String
的转换。
b) 使用const char*
的 'n' 个首字母创建一个构造const char*
。 如果“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_] = '\0';
}
当我尝试在我的主要方法中测试它们时,我的问题出现了,在那里我得到了这个错误:“c1 是不明确的”。
我尝试用一个虚拟参数来做这个(将我的unsigned
参数声明为一个在我的头中没有名字的int
),但我想将第二个参数初始化为 0 并且我不能使用一个虚拟参数来做到这一点。
我知道编译器不知道必须使用哪个构造函数,但我想以某种方式这样做。 有人可以帮助我吗? 对不起,我的英语不好。
我正在创建一个错误版本的 String 类......
不不不。 这绝不是你应该做的事情。 你说你是 C++ 的初学者,这并不意味着你会写出“糟糕”的代码,也许它很幼稚、很长、语法很糟糕,而且不是最好的解决方案,但这并不意味着它“糟糕” . 另外,如果你真的认为你的字符串类是“坏的”,我建议你重做。 你在学习的过程中,不要故意编写你知道低于你的标准的代码。 您现在的编码方式将影响您将来编写“更好”代码的方式,即使您认为不会。
因此,为了您的利益和未来将使用您的代码的人,请不要尝试使用“坏”代码。 干杯!
实际上,您只需要一个构造函数。 此外,您在两个函数中所做的基本相同,因此如果您确实需要两个函数,则可以从另一个调用一个。 而不是有两个单独的 Cadena::Cadena(const char* cad) 和 Cadena::Cadena(const char* cad, unsigned lon),你可以只使用 Cadena::Cadena(const char* cad, unsigned lon = 0),你可以调用 Cadena tmp(c),它会起作用。
所以构造函数将是
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_] = '\0';
}
并且您的主/测试器可以这样调用。
int main()
{
char s[] = "Hello";
Cadena c(s);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.