我有一个抽象基类,定义如下:
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
方法?
发布于 2021-04-03 21:19:46
是的,这是可行的。但是将原始指针存储在向量中不是一个好主意,使用智能指针或增强指针容器,如果这不是过度杀伤力的话。
https://stackoverflow.com/questions/66935934
复制