gpt4 book ai didi

c++ - 指向不同派生类的指针数组

转载 作者:行者123 更新时间:2023-11-30 04:58:57 25 4
gpt4 key购买 nike

我正在研究基于 ATMEGA328P 的一系列微处理器单元的核心。我有一个基类和两个派生类,我需要将它们混合存储在一个数组中。我有以下内容:

// base class
class Channel {
virtual String ReturnValuesAsString();
virtual void ResetValues();
...
}

// derived class
class DigitalChannel : Channel {
String ReturnValuesAsString() override;
void ResetValues() override;
}

// derived class
class AnalogChannel : Channel {
String ReturnValuesAsString() override;
void ResetValues() override;
}

在我的另一个对象上,我有以下内容:

class Input {
Channel *Channels; //array of channels

Input(int totalPossibleChannels, Channel *channels[]) {

this->Channels = new Channel[totalPossibleChannels];

// pseudocoded for loop using 'chanIndex' iterator to keep it short on this post
for channel in channels {
this->Channels[chanIndex] = *channels[chanIndex];
}
}
}

我初始化输入如下:

DigitalChannel digitalChannel00 = DigitalChannel();
DigitalChannel digitalChannel01 = DigitalChannel();

Channel *digitalInputChannelsInput0[] = { &digitalChannel00, &digitalChannel01 };

Input input0 = Input(2, digitalInputChannelsInput0);

我的问题是当我引用与以下类似的任何 channel 时:

input0.Channels[0].ReturnValuesAsString();

我得到了该方法的基类实现,而不是派生实现。我读过一些关于这个的内容,看来这是由对象切片将它们提炼到基类引起的。还有另一种方法可以解决这个问题吗?我无权访问此平台上的智能指针或 vector (arduino 是 c++ 的一个有限端口)。提前致谢!我也乐于接受任何建议。

更新:将此标记为已解决,但我想添加更多上下文以稍后帮助其他人

这是新的结构:

class Input {
Channel **Channels; //array of channel pointers

Input(int totalPossibleChannels, Channel *channels[]) {

this->Channels = new Channel *[totalPossibleChannels];

// pseudocoded for loop using 'chanIndex' iterator to keep it short on this post
for channel in channels {
this->Channels[chanIndex] = channels[chanIndex];
}
}
}

我初始化输入如下:

DigitalChannel digitalChannel00 = DigitalChannel();
DigitalChannel digitalChannel01 = DigitalChannel();

Channel *digitalInputChannelsInput0[] = { &digitalChannel00, &digitalChannel01 };

Input input0 = Input(2, digitalInputChannelsInput0);

最佳答案

您正在维护一个 channel 对象数组。
要使虚函数起作用,您需要维护基类类型的指针或引用。

Channel *Channels;

创建 channel 对象数组。您需要创建一个指向 channel 对象的指针/引用数组,即

Channel **Channels;

相应地更改程序以使用指针而不是 channel 类型的对象。

关于c++ - 指向不同派生类的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446647/

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