首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++如何使用复制构造函数

C++如何使用复制构造函数
EN

Stack Overflow用户
提问于 2020-09-08 14:47:28
回答 2查看 77关注 0票数 0

因此,我尝试在我的main中创建一个myCat副本,如下所示

代码语言:javascript
复制
#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();
   
}

但是,没有复制任何内容,因此我的输出是这样的

代码语言:javascript
复制
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不包含相同的数据?

EN

回答 2

Stack Overflow用户

发布于 2020-09-08 14:51:30

如果希望副本具有与原始对象相同的属性,则需要在修改对象后对其进行复制:

代码语言:javascript
复制
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();
票数 3
EN

Stack Overflow用户

发布于 2020-09-08 15:02:40

您的复制构造函数确实有效,只有在您设置数据之前才会进行复制。myCat2不包含相同的数据,因为它是具有“默认构造”数据的myCat的副本。

如果你想在改编myCat时改变myCat2,那么myCat2应该是一个参考,而不是副本。

(使用更改的构造函数签名的示例:https://godbolt.org/z/zE9MjK)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63788465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档