Dois
Dois

Reputation: 803

How to allow your data structure to take in objects of any class - C++

How do I do that? Like you know in Java, you can use an ArrayList and it will take any object as long as you cast it down to whatever it is when you're retrieving the object.

Even better, you can specify what class of objects that ArrayList would store by doing...

new ArrayList()< whateverObject >

I've implemented a linked list data structure in C++ and I'd like to know how I can allow it to do this...

At the moment, I'm just using...

typedef whateverObject ItemType

at the start of my header file for my linked list and then manipulating "ItemType" throughout the implementation of the linked list. So every time I want to change the type, e.g. instead of using the list for storing strings, I want to store an int, I'll have to change the typedef in my linked list's header but I want to be able to simply use it for any object so...

How?!

Thanks.

Upvotes: 3

Views: 738

Answers (4)

David Gruzman
David Gruzman

Reputation: 8088

In java you can do so, because all classes are inherited from one base class Object. In C++ you do not have it. The reason is that Object base class impose overhead for all objects, while C++ do not like any unnecessary overhead. If you want to store any object - you can store "void *" data type. The question remained - what you will be able to do with objects, without the knowledge of the type? If you do know - you can cast to the needed type and use it. The practice described above is not safe, and templates are better in most cases.

Upvotes: 2

Beno&#238;t
Beno&#238;t

Reputation: 16994

Templates are the answer to your question.

Define your linked list as follows :

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
};

The type to use is then ArrayList<WhateverObject>.

Upvotes: 6

Andreas Bonini
Andreas Bonini

Reputation: 44792

Use templates. It's a lot to explain so I'll just give you a link where it's explained much better than I'll ever be able to do here: C++ FAQ - Templates.

While you're at it, if you have the time, I suggest you read the whole FAQ, it's really a great resource!

Upvotes: 5

py_script
py_script

Reputation: 830

If I have understood well what you ask, templates is what you want.

Take a look here:

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

Upvotes: 4

Related Questions