繁体   English   中英

歧义构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM