gpt4 book ai didi

c++ - Arduino代码中的继承

转载 作者:行者123 更新时间:2023-11-27 23:18:34 27 4
gpt4 key购买 nike

我正在编写一些 Arduino 代码并尝试在某些类中使用继承。我有一个类“Actor”(我的基类)和一个类“Marble”(继承自 Actor)。以下是头文件:

Actor.h:

#ifndef Actor_h
#define Actor_h

#include "Arduino.h"

class Actor
{
public:
Actor();
void speak();
private:
};
#endif

大理石.h:

#ifndef Marble_h
#define Marble_h

#include "Arduino.h"
#include "Actor.h"

class Marble : public Actor {
public:
Marble();
virtual void speak();
private:
};
#endif

Actor .cpp:

#include "Arduino.h"
#include "Actor.h"

Actor::Actor()
{
}

void Actor::speak() {
Serial.println("Actor");
}

大理石.cpp:

#include "Arduino.h"
#include "Marble.h"

void Marble::speak() {
Serial.println("Marble");
}

最后,在循环函数中我做了:

void loop() {
Marble marble;
Actor children[2];
children[0] = marble;

children[0].speak();

这会导致打印“Actor”。

我发现了这个看起来与我的问题相似的链接,但该解决方案似乎对我不起作用: http://arduino.cc/forum/index.php?topic=41884.0

所以。似乎当我创建我的“Actors”数组并尝试将 Marble 插入其中时,它会被转换到 Actor 或类似的东西。问题是,我将有几个不同的角色,它们都将继承自“Actor”,我希望他们的数组可以迭代并调用覆盖它们的方法。

所以,也许问题在于我是如何解决这个问题的,或者可能存在一些语法错误?我不知道!

感谢您的帮助,凯文

最佳答案

您需要在 Actor 类中将 speak 声明为 virtual,而不仅仅是在 Marble 类中;如果没有它,Actor::speak 是一个-虚函数,因此您将始终优先于虚函数 Marble::speak 被调用.

就其值(value)而言,这与 Arduino 无关:这只是一个直接的 C++ 问题。

关于c++ - Arduino代码中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14883128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com