我该怎么做?就像你在Java中所知道的那样,你可以使用一个ArrayList,它只需要将它转换为你检索对象时的任何对象。
更好的是,您可以通过执行指定ArrayList将存储的对象类...
new ArrayList()< whateverObject>
我用C ++实现了一个链表数据结构,我想知道如何让它做到这一点......
目前,我只是在使用......
typedef whateverObject ItemType
在我的链接列表的头文件的开头,然后在整个链表的实现中操作“ItemType”。所以每次我想改变类型,例如而不是使用列表存储字符串,我想存储一个int,我将不得不更改我的链表的标题中的typedef但我希望能够简单地将它用于任何对象,所以......
如何?!
感谢。
答案 0 :(得分:6)
模板是您问题的答案。
按如下方式定义链接列表:
template<typename ItemType>
class ArrayList
{
// What's inside your class definition does not need to be changed
// Include your method definitions here and you'll be fine
};
然后使用的类型为ArrayList<WhateverObject>
。
答案 1 :(得分:5)
使用模板。这个解释很多,所以我只会给你一个链接,它解释得比我在这里做的要好得多:C++ FAQ - Templates。
当你在这里时,如果你有时间,我建议你阅读整个常见问题解答,这真的是一个很好的资源!
答案 2 :(得分:4)
答案 3 :(得分:2)
在java中,您可以这样做,因为所有类都是从一个基类Object继承的。在C ++中你没有它。原因是Object基类对所有对象施加了开销,而C ++不喜欢任何不必要的开销。 如果要存储任何对象 - 可以存储“void *”数据类型。问题仍然存在 - 在没有类型知识的情况下,您将能够使用对象做什么?如果您知道 - 您可以转换为所需类型并使用它。上述做法并不安全,大多数情况下模板更好。