gpt4 book ai didi

c++ - 在 C++ 中的 vector 中存储具有双重继承的对象

转载 作者:行者123 更新时间:2023-11-30 05:03:16 27 4
gpt4 key购买 nike

假设我有以下代码:

#include <string>
#include <iostream>
#include <vector>

struct AddColorToText
{
void MakeItRed(std::string text);
void MakeItGreen(std::string text);
void MakeItBlue(std::string text);
};

所以第一个结构是一个通用结构,可以为我输入的任何文本添加颜色。这只是一个例子;这个想法是第一个结构包含方法,然后我得到另一个具有互补方法的结构:

struct AddEffects
{
void MakeItFlash();
void MakeItFadeGradually();
void MakeItBounce();
};

最后我得到了继承自第一个和第二个结构并提供更多方法的第三个结构:

struct SuperText: public AddColorToText, public AddEffects
{
void SetSize();
void SetFont();
}

现在想象一下,出于某种原因,我必须将一个 superText 对象存储在一个 AddColorToText 指针的 vector 中:

SuperText TheSuperTextObject;
std::vector<AddColorToText*> TheVector;

TheVector.push_back(&TheSuperTextObject);

从 AddColorToText 指针 vector 中取回 SuperText 方法的最佳/最干净的方法是什么?

TheVector[0]->SetSize??????

最佳答案

像这样编辑类声明以启用多态性:

struct AddColorToText
{
void MakeItRed(std::string text);
void MakeItGreen(std::string text);
void MakeItBlue(std::string text);
virtual ~AddColorToText() {}
};

正如评论中正确指出的那样,您至少需要一个用于多态的虚方法。

然后你可以写

SuperText *sup = dynamic_cast<SuperText*>(TheVector[0]);
sup->SetSize();

关于c++ - 在 C++ 中的 vector 中存储具有双重继承的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507579/

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