如何解决传递参数时调用错误函数的主函数? (C ++)

时间:2019-04-16 02:52:01

标签: c++ inheritance copy-constructor

我有一个CS类项目,并且已经编写了一个复制构造函数,并将类的对象传递给它,但是主要是调用了错误的构造函数。

主要:

Mammal x;
cout << "Initial values for x: ";
cout << "Age = " << x.getAge() << " Weight = " << x.getWeight() << endl;
x.setAge(10);
x.setWeight(123);
cout << "Modified values for x: ";
cout << "Age = " << x.getAge() << " Weight = " << x.getWeight() << endl;
Mammal w(&x);
cout << "\nModified values for w: ";
cout << "Age = " << w.getAge() << " Weight = " << w.getWeight() << endl;
w.sound();

复制构造函数:

Mammal(Mammal &x)
{
    this->canSwim = x.canSwim;
}

主要调用功能:

 Mammal(bool x)
{
    canSwim = x;
}

我希望输出会复制这些值,但是它将默认构造函数中的age和weight的值设置为0。

2 个答案:

答案 0 :(得分:2)

通过引用传递时,请勿使用&来获取某物的地址。

尝试以下操作:

Mammal w(x);

此外,我建议使用编译标志-Wall -Wextra,因为它们可能会提醒您此问题。

答案 1 :(得分:0)

您的复制构造函数仅复制canSwim属性。 您必须明确指出要复制的属性:

Mammal(Mammal &x)
{
    this->canSwim = x.canSwim;
    this->age = x.age;
    this->weight = x.weight;
    ...
}

正如@Jeffrey Cash指出的那样,您应该从构造函数调用中删除“&”。