【发布时间】:2013-06-26 00:16:29
【问题描述】:
我目前正在使用 C++ 进行一个大学项目,我的一项任务是使用继承和多态性创建一个社交网络。目前我有一个在 Map 和 Multimap 上使用的 Node 类(两者都是手动创建的,而不是从 std 中使用)。该节点可以保存两个变量(例如 key 和 data),在我使用它的地方,第一个变量可以是指针或字符串(它们让我们使用 std::string).
我遇到的问题是,当我从“根”类(Object)继承并使用“Object”作为“key”的数据类型时,我无法通过使用 std 作为其构造函数的参数创建的字符串,因为它不是从我的 Object 类继承的。一种解决方案是实现我自己的字符串类并使其继承自 Object,但我正在寻找其他解决方法。
如果上面的逻辑有任何问题,请告诉我,因为我刚刚开始使用 C++。
编辑 1(我的节点的一些代码):
class TempNode
{
private:
TempNode* next;
Key key;
T value;
public:
TempNode();
explicit TempNode(const Key thisKey, const T thisValue, TempNode* thisNext = NULL)
: key(thisKey)
, value(thisValue)
, next(thisNext)
{
}
inline Key getKey() { return key; }
inline T getValue() { return value; }
inline TempNode* getNext() { return next; }
inline void setNext(TempNode* thisNext) { next = thisNext; }
};
string 或 Person 类型目前仅在 key 中使用,但这是使用模板的另一个实现(效果很好),但我的老师现在要求我们将继承应用于整个项目(我想习惯了)。
【问题讨论】:
-
请使用一些示例代码来展示您当前正在尝试的内容,即使您知道这是错误的。
-
您可以将
std::string包装在派生自Object的某个类中,因此这是可能的。 -
@aschepler 我添加了我的 Node 类和更多解释。
-
那么
Key和T是固定类型吗?还是缺少模板声明? -
@DyP 它丢失了,因为我目前正在编辑它并忘记添加它,但是是的,该代码用于模板中,我试图做的是添加 Object 作为键的类型,但是当我想使用 std 中的字符串作为节点的键时,就会出现问题。
标签: c++ inheritance polymorphism stdstring