因此,我尝试在我的main中创建一个myCat副本,如下所示
#include<iostream>
#include<string>
using namespace std;
class Cat
{
private:
string name;
string breed;
int age;
static constexpr double licenseFee = 10;
public:
void setCatData(string, string, int);
void showCat();
void displayAddress(Cat mycat);
Cat(){
}
Cat(const Cat &aCat) { //copy constructor
name = aCat.name;
breed = aCat.breed;
age = aCat.age;
}
};
void Cat::setCatData(string catName, string catBreed, int catAge)
{
name = catName;
breed = catBreed;
age = catAge;
}
void Cat::showCat()
{
cout << "Cat: " << name << " is a " << breed << endl;
cout << "The cat's age is " << age << endl;
cout << "License fee: $" << licenseFee << endl;
}
void Cat::displayAddress(Cat myCat) {
cout << "The address of the object is: "<< &myCat;
}
int main()
{
Cat myCat;
Cat myCat2 = myCat; //coppy constructor called
cout << "ORIGNAL CAT" << endl;
myCat.setCatData("Tigger", "Fluffy unit", 3);
myCat.showCat();
cout << endl;
//myCat.displayAddress(myCat);
cout << "COPY CAT" << endl;
myCat2.showCat();
}但是,没有复制任何内容,因此我的输出是这样的
ORIGNAL CAT
Cat: Tigger is a Fluffy unit
The cat's age is 3
License fee: $10
COPY CAT
Cat: is a
The cat's age is 1
License fee: $10我不确定为什么myCat和myCat2不包含相同的数据?
发布于 2020-09-08 14:51:30
如果希望副本具有与原始对象相同的属性,则需要在修改对象后对其进行复制:
Cat myCat;
cout << "ORIGNAL CAT" << endl;
myCat.setCatData("Tigger", "Fluffy unit", 3);
myCat.showCat();
cout << endl;
Cat myCat2 = myCat;
cout << "COPY CAT" << endl;
myCat2.showCat();发布于 2020-09-08 15:02:40
您的复制构造函数确实有效,只有在您设置数据之前才会进行复制。myCat2不包含相同的数据,因为它是具有“默认构造”数据的myCat的副本。
如果你想在改编myCat时改变myCat2,那么myCat2应该是一个参考,而不是副本。
(使用更改的构造函数签名的示例:https://godbolt.org/z/zE9MjK)
https://stackoverflow.com/questions/63788465
复制相似问题