摘要 类,多态性 C++ - 在另一个函数中调用纯虚方法

Abstract Classes, Polymorphism C++ - Calling pure virtual method in another function

我有一个抽象基 class 定义如下:

class NodeSubElementEnforceType {
    public:
        virtual void getType() = 0;
        void performChecks() {
            getType();
            // other things ......
        }
};

我将有一堆派生的 classes,每个都有自己的 getType() 方法实现,例如:

class BNode : public NodeSubElementEnforceType {
    public:
        void getType() {
            // ..... BNode implementation ....
        }
}

class CNode : public NodeSubElementEnforceType {
    public:
        void getType() {
            // ..... CNode implementation ....
        }
}

我会将派生的 class 对象存储在某种容器中,如下所示:

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() 在运行时调用正确派生的 class 的 getType() 方法(BNodeCNode)。我在基础 class 中实现了 performChecks(),因为我不想在所有派生的 class 中实现它,唯一改变的是 getType() 方法取决于在导出的 class.

这样的设计好吗?我应该从另一个具体方法内部调用 virtual 方法吗?

是的,它会起作用。但是将原始指针存储在向量中并不是一个好主意,如果这不是矫枉过正的话,请使用智能指针或 boost 指针容器。