多态数组仅复制类基属性[C+;+;] 我在C++中遇到了多线程数组的问题。我有: ClassBase **ptr_array = new Base*[dimension];

多态数组仅复制类基属性[C+;+;] 我在C++中遇到了多线程数组的问题。我有: ClassBase **ptr_array = new Base*[dimension];,c++,arrays,polymorphism,copying,C++,Arrays,Polymorphism,Copying,但当我尝试这样做时: ptr_array[0]=new ChildClass; *ptr_array[0]=ChildIWantToCopy; 它只复制类库的属性 有什么想法吗?提前谢谢 编辑:非常感谢,不幸的是,我不能使用引用,因为不知何故,我的数组变得疯狂,只使用数组的第一个位置,不管发生什么。我会继续研究的。 再次感谢 编辑2: 当我试着这样做的时候 ptr_array[0]=&ChildIWantToCopy; 不知怎的,我的数组疯了,它总是在第

但当我尝试这样做时:

     ptr_array[0]=new ChildClass; 
    *ptr_array[0]=ChildIWantToCopy; 
它只复制类库的属性

有什么想法吗?提前谢谢

编辑:非常感谢,不幸的是,我不能使用引用,因为不知何故,我的数组变得疯狂,只使用数组的第一个位置,不管发生什么。我会继续研究的。 再次感谢

编辑2:

当我试着这样做的时候

    ptr_array[0]=&ChildIWantToCopy;
不知怎的,我的数组疯了,它总是在第一个位置复制。事实上,我检查了整个数组,以防在分配任何内容之前,子元素已经在数组中,即使它不在数组中,它也会说它在并复制子元素(这不应该,因为如果子元素在数组中,我会让它避免分配)。这让我快发疯了

编辑3: 转让经营人的声明: 类基本客户端:

    virtual void operator=(Cliente const &cliente); 
儿童班人员:

   void operator=(Persona const &persona);  
儿童班公司:

   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);
}
Cliente&Persona::operator=(Cliente const&Cliente)
{
如果(此==&客户)
归还*这个;
//查看被复制的对象是否是另一个角色
const Persona*pOther=动态演员阵容(和客户);
//如果波特不为空,则表示施法成功
如果(波特)
{
//复制派生类属性
//这个->x=波特->x,等等。
}
//调用基类运算符=,以复制基类属性
返回Cliente::operator=(Cliente);
}

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

它称为对象slicingIs,这是您无法编写
ptr\u数组[0]=new ChildClass(instanceIWantToCopy)
?ClassBase是否有虚拟赋值操作符?是的,它有。更重要的是,我尝试使用SET函数来查看是否可以手动添加属性值,它说ClassBase没有名为namefunction的成员,因此即使我创建了一个新的ChildClass,它也会将其视为classBaseYes,因为它是指向ClassBase的指针;你得先投。C++是静态的、显式的。编译器不知道指向的对象有一个名为“namedfunction”的方法,因为它只知道它是一个类库。您能否发布赋值运算符声明的代码(在基类和派生类中)?如果你做得对,它应该会起作用,我以前也做过类似的事情。非常感谢你的回答:D我设法解决了它,我会尝试那种方法,看看它是否也起作用。谢谢