Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;can';由于多态性,无法复制节点_C++_Polymorphism - Fatal编程技术网

C++ c++;can';由于多态性,无法复制节点

C++ c++;can';由于多态性,无法复制节点,c++,polymorphism,C++,Polymorphism,我正在处理一个节点树,我想复制一个节点及其所有子节点,但由于多态性,我不能 类节点 { 节点(常量节点和其他) { //不知道该怎么办 } ~Node()虚拟节点 { 用于(自动子对象:子对象) 删除儿童; } 媒介儿童; } 类节点1 { //节点1 } 类节点2 { //节点2 } 节点中的子节点是节点1和节点2的组合 我尝试过使用新节点异常,但它不起作用,因为它没有足够的空间容纳多态节点。我能想到的唯一方法是使用malloc,但这似乎有点粗糙 我将创建一个抽象基类,如下所示 class

我正在处理一个节点树,我想复制一个节点及其所有子节点,但由于多态性,我不能

类节点
{
节点(常量节点和其他)
{
//不知道该怎么办
}
~Node()虚拟节点
{
用于(自动子对象:子对象)
删除儿童;
}
媒介儿童;
}
类节点1
{
//节点1
}
类节点2
{
//节点2
}
节点中的子节点是节点1和节点2的组合


我尝试过使用新节点异常,但它不起作用,因为它没有足够的空间容纳多态节点。我能想到的唯一方法是使用malloc,但这似乎有点粗糙

我将创建一个抽象基类,如下所示

class i_node
{
    public: 

    virtual i_node() = 0;
    virtual ~i_node(){}
}
并使Node、Node1和Node2都从i_节点继承,子向量包含指向i_节点的指针,而不是派生类

vector<i_node*> children;
向量子;

使用
dynamic\u cast
尝试if statemt。也许会有帮助。
Node1
Node2
不应该从
Node
派生吗?您的描述暗示了这一点,但它不在您的代码中。多态性只适用于指针或引用,因此您使用
vector
已经有了一个良好的开端。但是也必须有一个公共父类。假设(我假定派生的关系应该存在于代码中)P.S. C++替换为<代码> MalOC 是代码>新< /code >。