我为一个具有节点的基本二叉树编写了一个函数:
struct node{
int key;
node* left;
node* right;
};
现在,对于另一个类,我想在该节点中添加指向前导和后继的指针。我希望能够将这个新结构体作为一个节点传递给基本的二叉树函数。据我所知,从网上看,派生结构不能在其超的地方传递。那么,如果我这样做了:
struct fancyNode : public node{
fancyNode* pred;
fancyNode* succ;
};
这行不通。
我的下一个想法是使用一个新的结构体和一个指向旧节点结构体的指针:
struct fancyNode{
node* oldNode;
fancyNode* pred;
fancyNode* succ;
};
现在可以工作了,但是我必须将oldNode元素传递给函数,而不是简单地传递整个fancyNode。
是否有另一种更简单的方法我错过了,或者这是唯一的方法来处理这个?
按值传递与按引用传递
我从网上看到的理解,派生结构不能传入它的超级的地方。所以,(…)不太管用。
如果你打算按值传递对象,这个语句是正确的。然后可能会发生切片,这样就会丢失派生对象的附加数据。
但是,当然可以传递指向派生对象的指针或引用,而不是指向基类对象的指针或引用。
多态性如果你用旧的C方式使用struct,只是为了定义一个数据结构,你可以通过一些全局函数来操作,你不会受益于c++的面向对象。
你应该考虑的不是数据结构,而是对象,也就是数据和通常在这些数据上执行的操作。如果以这种方式开始设计代码,那么可以使一些操作为多态(使用虚函数)。这不仅允许您通过指针或引用传递基类和派生类对象,还允许您调用基本操作,而不必担心它是基类对象还是派生类对象。