在C 中以双继承为单位的对象

Store object with double inheritance in vector in C++

本文关键字:为单位 对象 继承      更新时间:2023-10-16

假设我有以下代码:

#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 Pointers的向量中存储一个超文本对象:

SuperText TheSuperTextObject;
std::vector<AddColorToText*> TheVector;
TheVector.push_back(&TheSuperTextObject);

从AddColortotext Pointers向量恢复超文本方法的最佳/最清洁方法是什么?

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