首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >抽象类,多态性C++ -在另一个函数中调用纯虚方法

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

Stack Overflow用户
提问于 2021-04-03 21:15:16
回答 1查看 47关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class NodeSubElementEnforceType {
    public:
        virtual void getType() = 0;
        void performChecks() {
            getType();
            // other things ......
        }
};

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class BNode : public NodeSubElementEnforceType {
    public:
        void getType() {
            // ..... BNode implementation ....
        }
}

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::vector<NodeSubElementEnforceType*> allNodes;
NodeSubElementEnforceType* node1 = new BNode();
NodeSubElementEnforceType* node2 = new CNode();
allNodes.emplace_back(node1);
allNodes.emplace_back(node2);

现在,我只想遍历向量中的所有对象,并调用每个对象的performChecks()方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (unsigned i = 0; i < allNodes.size(); i++) {
    allNodes.at(i)->performChecks();
}

我的问题是,这会像我希望的那样工作吗?

我希望performChecks()在运行时调用正确的派生类的getType()方法( BNodeCNode)。我在基类中实现了performChecks(),因为我不想在所有派生类中实现它,唯一变化的是依赖于派生类的getType()方法。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-03 21:19:46

是的,这是可行的。但是将原始指针存储在向量中不是一个好主意,使用智能指针或增强指针容器,如果这不是过度杀伤力的话。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66935934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文