【问题标题】:How do I copy an object using a pointer?如何使用指针复制对象?
【发布时间】:2014-04-30 10:17:08
【问题描述】:

我正在学习 C++,我们的老师要求我们使用带有指针的复制函数。他给了我们一个与这个类似的代码,但我不知道如何使用复制功能:

class Animal
{
public:
    ...
    virtual Animal* copy() const =0;
}


class Dog : public Animal
{
public:
    ...
    virtual Animal* copy() const;
}


Animal* Dog::copy() const
{
    return new Dog(*this);
}


int main(){
Dog husky (…);
//Labrador = copy() of husky 
}

例如,我应该写什么来创建一个新的对象(拉布拉多犬)作为对象(哈士奇)的副本?

谢谢

【问题讨论】:

    标签: object c++11 copy clone virtual


    【解决方案1】:

    在这种情况下,您实际上根本不需要使用copy() 方法,因为您知道您的husky 对象是Dog,并且您希望副本是另一个Dog。所以你可以写

    Dog labrador(husky)
    

    使用其复制构造函数将labrador 构造为husky 的副本。

    copy() 方法的要点在于,有时您只有一个 Animal*,而您实际上并不知道它指向的具体动物类型,因此您不知道要创建哪种类型的新动物.例如:

    void example(Animal const *animal) {
        Animal *clonedAnimal = animal->copy();
    }
    

    example 函数不知道它被赋予了什么样的Animal,但动物对象本身知道它是什么,并且虚函数调用让该动物负责复制自己。如果animal 指向Dog 实例,则Dog 版本的copy() 将运行并构造Dog。如果animal 指向Cat,则Cat 版本的函数将运行并构造一个新的Cat

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 2022-10-04
      • 2013-07-05
      • 2011-02-12
      • 2012-12-04
      • 2011-02-09
      • 2021-06-19
      • 2016-03-18
      相关资源
      最近更新 更多