バイナリ ノード、単項ノード、ターミナル ノードなど、いくつかの異なるノード タイプを持つツリーを作成しています。すべてのノードが継承する ABC があります。次のように、ツリーの再帰的なコピー コンストラクターを作成しようとしています。
class gpnode
{
public:
gpnode() {};
virtual ~gpnode() {};
gpnode(const gpnode& src) {};
gpnode* parent;
}
class bnode:gpnode
{
public:
bnode() {//stuff};
~bnode() {//recursive delete};
bnode(const bnode& src)
{
lnode = gpnode(src.lnode);
rnode = gpnode(src.rnode);
lnode->parent = this;
rnode->parent = this;
}
gpnode* lnode;
gpnode* rnode;
}
class unode:gpnode
{
public:
unode() {//stuff};
~unode() {//recursive delete};
unode(const unode& src)
{
node = gpnode(src.node);
node->parent = this;
}
gpnode* node;
}
私の問題は私ができないことです
node = gpnode(src.node);
gpnode は仮想クラスだからです。私はそれをできた
node = unode(src.node);
しかし、u ノードの子が b ノードの場合は機能しません。必要なコピーコンストラクターをインテリジェントに呼び出すにはどうすればよいですか?