如何允许您的数据结构接受任何类的对象 - C ++

时间:2010-02-03 10:33:03

标签: c++ data-structures

我该怎么做?就像你在Java中所知道的那样,你可以使用一个ArrayList,它只需要将它转换为你检索对象时的任何对象。

更好的是,您可以通过执行指定ArrayList将存储的对象类...

  

new ArrayList()< whateverObject>

我用C ++实现了一个链表数据结构,我想知道如何让它做到这一点......

目前,我只是在使用......

  

typedef whateverObject ItemType

在我的链接列表的头文件的开头,然后在整个链表的实现中操作“ItemType”。所以每次我想改变类型,例如而不是使用列表存储字符串,我想存储一个int,我将不得不更改我的链表的标题中的typedef但我希望能够简单地将它用于任何对象,所以......

如何?!

感谢。

4 个答案:

答案 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)

如果我很清楚你的要求,模板就是你想要的。

看看这里:

http://www.cplusplus.com/doc/tutorial/templates/

答案 3 :(得分:2)

在java中,您可以这样做,因为所有类都是从一个基类Object继承的。在C ++中你没有它。原因是Object基类对所有对象施加了开销,而C ++不喜欢任何不必要的开销。 如果要存储任何对象 - 可以存储“void *”数据类型。问题仍然存在 - 在没有类型知识的情况下,您将能够使用对象做什么?如果您知道 - 您可以转换为所需类型并使用它。上述做法并不安全,大多数情况下模板更好。