假设我得到以下代码:
#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??????
答案 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();