如何解决C ++如何使用复制构造函数
所以我试图像这样在我的主目录中创建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
不确定myCat2为什么不包含与myCat相同的数据吗?
解决方法
如果您希望副本具有与原始对象相同的属性,则需要在修改对象后复制它:
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();
,
您的复制构造函数确实起作用,只有复制在设置数据之前发生。
myCat2
不包含相同的数据,因为它是myCat
的副本,其中包含“默认构造的”数据。
如果您希望myCat2
在修改myCat
时进行更改,那么myCat2
应该是参考,而不是副本。
(您的示例具有更改的构造函数签名:https://godbolt.org/z/zE9MjK)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。