我有一个与C++继承相关的问题。我有一组这样的类(我没有给出完整的类结构,因为我很懒:)。我想使用com指针访问chiComponent类的公共方法。我该怎么做呢?
请注意,我必须在很多地方更改"com“所指向的对象。所以我想我不能再要一个了
chiComponent *ccom = <some_cast> com;
ccom.chiComponentMethod()我该怎么做呢?
class Component{
};
class chiComponent : public Component {
public:
void chiComponentMethod()
{
cout << "Hi! Chi component function called!!";
}
}
class parent {
protected:
Component *com;
};
class child : public parent{
public:
child() {
com = new chiComponent();
}
}关于Arun
发布于 2010-05-28 02:56:20
您将需要在Component中实现一个纯虚拟方法;比如componentMethod()
virtual void componentMethod() = 0;
这将使Component成为一个抽象类,因此无法实例化。
然后,在chiComponent中,您可以拥有:
virtual void componentMethod() {
chiComponentMethod();
}或者,您可以将chiComponentMethod重命名为componentMethod,并将实现直接放入其中。
此外,Component的任何进一步实现都可以实现自己的功能。
另外,我相信
com = new chiComponent();应该是
*com = new chiComponent();因为com是一个Component *。
发布于 2010-05-28 03:38:39
在某种意义上,AVL树是BST树的一种类型,它支持所有的BST树操作,并且另外可以提供更多。所以乍一看,从BSTTree派生AVLTree是有意义的。但是BSTTree依赖于内部类BSTNode,这不足以提供所有的AVLTree功能。
如果从BSTNode派生AVLNode,则有两种选择。您可以更改BSTNode以支持超类所需的所有功能,但这没有多大意义。最好从一开始就设计节点类,它支持两种类型的尝试的所有功能。
另一种选择是使所有BSTTree公共方法都是虚的,并在AVLTree类的这些方法的所有实现中显式地将节点强制转换为AVLNode。不管怎样,你都想让这些方法成为虚拟的。否则,如果有人使用BSTTree接口来操作AVLTree的实际实例(例如,有一个指向AVLTree实例的BSTTree*指针),灾难就会发生。
发布于 2010-05-28 02:55:45
在基类中使用虚函数:
virtual void chiComponentMethod() = 0;https://stackoverflow.com/questions/2923960
复制相似问题