如何解决抽象类,多态 C++ - 在另一个函数中调用纯虚方法
我有一个像这样定义的抽象基类:
class NodeSubElementEnforceType {
public:
virtual void getType() = 0;
void performChecks() {
getType();
// other things ......
}
};
我将有一堆派生类,每个类都有自己的 getType()
方法实现,例如:
class BNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... BNode implementation ....
}
}
class CNode : public NodeSubElementEnforceType {
public:
void getType() {
// ..... CNode implementation ....
}
}
我会将派生类对象存储在某种容器中,如下所示:
std::vector<NodeSubElementEnforceType*> allNodes;
NodeSubElementEnforceType* node1 = new BNode();
NodeSubElementEnforceType* node2 = new CNode();
allNodes.emplace_back(node1);
allNodes.emplace_back(node2);
现在,我只想遍历向量中的所有对象并调用每个对象的 performChecks()
方法:
for (unsigned i = 0; i < allNodes.size(); i++) {
allNodes.at(i)->performChecks();
}
我的问题是,这会像我希望的那样工作吗?
我希望 performChecks()
在运行时调用正确派生类的 getType()
方法(BNode
或 CNode
)。我在基类中实现了performChecks()
,因为我不想在所有派生类中都实现它,唯一改变的是getType()
方法取决于派生类。
这是一个好的设计吗?我应该从另一个具体方法内部调用 virtual
方法吗?
解决方法
是的,它会起作用。但是将原始指针存储在向量中并不是一个好主意,如果这不是矫枉过正的话,请使用智能指针或 boost 指针容器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。