以抽象类为声明的基于范围的 for 循环 C++

每秒卢比

我想list<abstract>使用 for 循环遍历抽象类的列表

这是我的代码:

class Component {
    protected:
        string name;
        int price;

    public:
        Component(string name, int price): name(name), price(price){};

        virtual int getPrice() =0;
};

class Composite : public Component {
    list<Component> components;

    public:
        int getPrice() {
            for(Component comp : components) {
                return comp.getPrice();   
            } 
        }   
};

class Leaf : public Component {
    public:
        int getPrice() {
            return price;
        }
};

但是我得到一个错误;无法分配抽象类型“组件”的对象。这个错误是有道理的,因为抽象类型不能被实例化。

duong_dajgja

您的代码有一些问题:

你声明virtual int getPrice() = 0;,这使你的Component纯虚拟 -> 你不能实例化它的一个对象 ->list<Component> components;出现没有意义。请考虑使用list<Component*>(或智能指针)代替!

基于范围的 for 循环:

for(Component comp : components) {
    return comp.getPrice();   
}

假设你已经更新了你的列表,list<Component*>那么 for 循环可能是:

for(auto& comp : components) {
    return comp->getPrice();   
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++实现基于循环和基于范围的循环性能

来自分类Dev

如何在C ++中声明抽象类

来自分类Dev

如何在C ++中声明抽象类的向量列表?

来自分类Dev

抽象类C ++

来自分类Dev

C ++:抽象类

来自分类Dev

C ++如何将基于范围的for循环重写为普通循环?

来自分类Dev

C ++中基于范围的for循环的替代方法

来自分类Dev

基于C ++范围的for循环和元素复制

来自分类Dev

基于范围的非常量文字C ++循环

来自分类Dev

C ++抽象类型声明

来自分类Dev

C ++类循环引用?

来自分类Dev

为循环优化C

来自分类Dev

抽象类C#

来自分类Dev

界面与抽象类C ++

来自分类Dev

是否可以在C ++ / CLR中实现用C#声明的抽象类?

来自分类Dev

C ++:基于覆盖循环的逻辑

来自分类Dev

基于C#日期的循环

来自分类Dev

在C ++中声明抽象类型的变量

来自分类Dev

C ++类中的循环依赖

来自分类Dev

C ++类中的循环依赖

来自分类Dev

C ++类之间的循环依赖

来自分类Dev

C#声明类型定义无法创建抽象类或接口的实例

来自分类Dev

C ++ 11对动态数组使用“基于范围的for循环”(每个)

来自分类Dev

将在C ++中基于范围的for循环保留索引顺序

来自分类Dev

C ++基于范围的for循环遍历valarray rvalue不起作用

来自分类Dev

基于范围的循环:自动更改在C ++ 11中的含义

来自分类Dev

基于C ++ 11范围的派生对象上的for循环

来自分类Dev

在Qt中正确使用基于C ++ 11范围的for循环

来自分类Dev

C ++ 98中基于范围的循环和向量