C++类继承自一种类型。

3
我创建了一个类型,它是一个字符串优先级队列列表(这不是我的想法,我必须这样做):
typedef list<priority_queue<string>> L;
L myList;

现在我需要创建一个名为M的类,它将从此类型继承。据我所知,我需要使用模板来实现,但我仍然不知道如何做,而且我在网上没有找到任何信息。

如何使一个类继承自一个类型?


2
这些是std::liststd::priority_queuestd::string,还是你自己的版本?如果是前者,那么为什么需要继承它们呢?从标准库类型继承并不违法,但很多人似乎认为这是一个坏主意。而且为什么你会遇到麻烦;这应该与任何其他继承没有区别。 - Daniel H
@DanielH 是的,它们来自std。 我需要从它们继承,因为这是我学校的家庭作业。我们通常必须做一些非常奇怪和无用的事情,以便学习新的结构等知识。我刚刚让它工作了,但我不确定我是否做得对。把“typedef list<priority_queue<string>> L;”放在main()之外好吗?确切地说,在它之前? - Ania
@Daniel:抱歉在手机上误读了帖子。当然你必须从L继承。 - MikeMB
@Ania 我不会使用那个typedef,但根据你的代码的其余部分,它可能很有用。如果你确实需要它,最好给它一个更具描述性的名称,而不是 L,至少像 QueueContainer 这样的名称可以告诉你它包含了队列。 - Daniel H
@DanielH 好的,谢谢你的提示!但是我可以把它放在 main() 函数外面吗?这听起来对我来说不是一个好主意,但这是唯一让它对我起作用的方法,所以我想这样做应该没问题吧? - Ania
显示剩余2条评论
1个回答

4
这很简单:
class foo : L { // Note this is private inheritance
};

类型别名只是另一种类型的名称,而不是它本身的类型。由于std::list是一个类模板,而L命名了一个完整的特化,所以您可以这样做。

只要确保不以任何涉及删除指向std::list的指针的多态方式使用它。它没有设计虚构函数,因此不适合这种情况。


@StoryTeller 但是我不能这样做 L t=new foo(); t->thing(); delete t;,因为列表没有虚析构函数 :( - UKMonkey
谢谢!这可能听起来像一个愚蠢/简单的问题,但我觉得要求我从一个类型继承很奇怪,我从来没有这样做过。 - Ania
2
@Ania - 这并不愚蠢。只是对于新手来说最好在理解所有影响之前不要这样做。而你提出这个问题绝对不是一个傻瓜行为。 - StoryTeller - Unslander Monica
@Ania,你一直在说“从类型继承”。所有的继承都是从类型继承。 - Daniel H
@Ania - 好的,你只需要将该方法添加到 foo 中,就像为任何类一样。由于 foo 也是一个 L,因为继承的原因,你可以在 foo 上调用任何 std::list 函数。 - StoryTeller - Unslander Monica
显示剩余12条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接