Как исправить основную функцию, вызывающую неверную функцию при передаче параметров?(C ++) - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть проект для моего класса CS, и я написал конструктор копирования и передаю в него объект класса, но main вызывает неправильный конструктор.

main:

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;
}

Я ожидаю, что выходные данные скопируют значения, но он устанавливает значение возраста и веса0 от конструктора по умолчанию.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Когда вы переходите по ссылке, вы не используете & для получения адреса чего-либо.

Попробуйте следующее:

Mammal w(x);

Также я предлагаю использовать флаги компиляции-Wall -Wextra, поскольку они, вероятно, предупредили бы вас об этой проблеме.

0 голосов
/ 16 апреля 2019

Ваш конструктор копирования только копирует атрибут canSwim. Вы должны явно указать, какие атрибуты вы хотите скопировать:

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

И, как указал @Jeffrey Cash, вы должны удалить «&» из вызова конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...