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

时间:2018-03-27 08:09:35

标签: c++ vector multiple-inheritance

假设我得到以下代码:

#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();
}

现在想象一下,由于某种原因,我必须在addColorToText指针的向量中存储一个超文本对象:

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

TheVector.push_back(&TheSuperTextObject);

从AddColorToText指针向量中获取SuperText方法的最佳/最干净的方法是什么?

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

1 个答案:

答案 0 :(得分:1)

编辑你的类声明以启用多态,如下所示:

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();