gpt4 book ai didi

c++ - 多态数组只复制类的基本属性[C++]

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:34 28 4
gpt4 key购买 nike

我在使用 C++ 中的多态数组时遇到问题。我有:

    ClassBase **ptr_array = new Base*[dimension]; 

但是当我尝试这样做时:

     ptr_array[0]=new ChildClass; 
*ptr_array[0]=ChildIWantToCopy;

它只复制 ClassBase 的属性。

有什么想法吗?提前致谢

编辑:非常感谢,不幸的是我不能使用引用,因为不知何故我的数组变得疯狂并且无论如何只使用数组的第一个位置。我会继续研究它。再次感谢

编辑2:

当我尝试这样做时

    ptr_array[0]=&ChildIWantToCopy;

我的数组不知何故变得疯狂,它总是在第一个位置复制。事实上,在分配任何东西之前,我检查了整个数组,以防 child 已经在其中,即使它不在数组中,它也说它是并复制 child ,(这不应该,因为如果 child 在里面我做它避免了分配)。这让我发疯。

编辑3:赋值运算符的声明:类基客户端:

    virtual void operator=(Cliente const &cliente); 

ChildClass 人:

   void operator=(Persona const &persona);  

ChildClass公司:

   void operator=(Empresa const &empresa);

最佳答案

您的多态赋值运算符不起作用,因为派生类中的声明与基类中的声明不同。首先赋值运算符应该返回一个引用,所以改成:

virtual Cliente &operator=(Cliente const &cliente); 

然后在子类中使用相同的声明:

Cliente &operator=(Cliente const &cliente); 

子类的实现看起来像这样:

Cliente &Persona::operator=(Cliente const &cliente)
{
if (this == &cliente)
return *this;

//See if the object being copied is another Persona
const Persona *pOther = dynamic_cast<const Persona *>(&cliente);

// if pOther is not null, cast was successful
if (pOther)
{
// Copy derived class attributes
// this->x = pOther->x, etc.
}

// Call base class operator=, to copy base class attributes
return Cliente::operator=(cliente);
}

您还可以使用派生类型为派生类定义第二个赋值运算符(例如,Persona &operator=(Persona const &persona))。但是将在您的示例中使用的那个是将 Cliente const & 作为参数的那个。

关于c++ - 多态数组只复制类的基本属性[C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16839288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com