首页 > 解决方案 > 如何进行继承

问题描述

无法理解如何正确继承对象。有我的代码:

#include <ArduinoSTL.h>

class Element {
public:
    Element() {

    };
    virtual void execute() {
        Serial.print("element\n");
    }
};
class ExtendedElement : public Element {
public:
    ExtendedElement() : Element() {

    }
    virtual void execute() {
        Serial.print("extended element\n");
    }
};
class Wrapper {
private:
    std::vector<Element> elements;

public:
    void execute() {
        for (Element element : elements) {
            element.execute();
        }
    }

    void addTask(Element element) {
        elements.push_back(element);
    }
};

Wrapper wrapper;

void setup() {
    Serial.begin(9600);
    ExtendedElement extendedElement = new ExtendedElement();
    wrapper.addTask(extendedElement);
}

void loop() {
    wrapper.execute();
}

所以,我想扩展类,创建这个扩展类的实例,并将这样的实例放入基类的向量中。然后我想遍历向量中的元素,并调用子类函数。无法理解我做错了什么。

标签: arduino

解决方案


的结果new应该分配给一个指针

ExtendedElement *extendedElement = new ExtendedElement();

元素应该是一个指针向量

class Wrapper {
private:
    std::vector<Element*> elements;

public:
    void execute() {
        for (Element *element : elements) {
            element->execute();
        }
    }

    void addTask(Element *element) {
        elements.push_back(element);
    }
};

推荐阅读