C++: Leaving open option for a pointer to point to one of two types -
in c++, have 2 classes: node , rootnode. have member node can pointer either node or rootnode. there way can leave open option pointer point 1 of 2 different classes without needing commit 1 of them until set value of pointer?
i have seen answers using union; not sure these work, since use variable defined using union have know whether pointing node or rootnode know object of union reference (union_typedef.node or union_typedef.rootnode). want able use pointer without needing know whether pointing node or rootnode.
there way want do, , way need do (and these 2 different things).
to want (set pointer of 1 of 2 types) use union:
struct mystruct { union { node *nodeptr; rootnode *rootptr; } }; above, can set either nodeptr or rootptr, union take space of single pointer.
what need, however, class inheritance virtual functions, , pointer base class:
struct node { virtual void dosomething() { cout << "i'm node" << endl; } }; struct rootnode : public node { virtual void dosomething() { cout << "i'm root" << endl; } }; you can make pointer node, , assign pointer node or rootnode. no matter assign, call of dosomething() routed correct function:
node *n = new node(); n->dosomething(); // prints "i'm node" delete n; n = new rootnode(); n->dosomething(); // prints "i'm root" delete n; neither
nodenorrootnodederive other.
if derivation hierarchy fixed , cannot change it, can build wrapper classes node , rootnode, have 1 wrapper derive other (or have them both derive common ancestor), , make virtual functions dispatch functions of wrapped objects.
Comments
Post a Comment