abstract data type

What is a difference between an abstract data type and an object.

Who is Participating?
nietodConnect With a Mentor Commented:

An object is an instance of a data type.  For example in

class SomeClass

SomeClass A;
SomeClass B;

"SomeClass" is a data type.  That is, it is not data, it specifies a type of data, just like int or char do.  "A" and "B" are objects.  They ARE the data and they are of the type "SomeClass"

An "abstract data type" is a data type, but it is a data type that cannot be used _directly_ to create objects.   Thus it is not directly useful (A data type that can't be used to create objects is not bery useful), but it may be used to create other data types and some of those data types may be "concrete" (instead of "abstract") and thus may be used to create objects.

In C++, only a class may be an abstract data type.  An abstract data type class, usually called an "Abstract Base Class" or ABC, is created by specifying a pure virtual function.  This is a function that must be defined in a derived class.  One a derived class that specifies an implimentation of this pure virtual function (and any others) will be "concrete".  For example.

class Abstract
   virtual void DoSomething() {} = 0; // Pure virtual function.

class Concrete : public abstract
   virtual void DoSomething() {}; // virtual function defined.

Abstract A; // ERROR. Abstract is an ABC
Concrete C; // Okay.

Let me know if you have any questions.
Thanks for your comments.

Although your comments were relatively detailed, thanks for that, but still there is some confusion.

First of all dont go in Virtual funtions.I know them but it is better to leave them for future discussion.

Now what you are trying to say is that abstract data type can be used as a data type but can't be used as an instance (object).

OK then my next question is that how are we going to define abstract data type and call it within some class or functioin. your above explanation technique was excelent, but don't go into virtual functions.

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

This is redgreenred's question.  You should ask you own question.

>> abstract data type can be used as a data
>> type but can't be used as an instance (object). .  
It cannot be used to create objects, that is objects of its type cannot be created.  So it is not a "concrete" or "complete" (my term) data type.  Its only value is that it can be used as a base class of other data types.  

>> above explanation technique was
>> excelent, but don't go into virtual functions
That's the only way in C++.  
redgreenredAuthor Commented:
thank you both tparvaiz and nietod,

It seems that I've got it my answer. Let me review it again.

abstract class can only be a base class and cannot be used anywhere else.

Is that the case only for C++ or with all other languages.

nietod! can you tell me, how do we declare abstract class?

>> cannot be used anywhere else
Not completely true.  The abstrcat type may not be used to create objects of the abstract type.  But the type may be used in other ways.  Like it may be used to declare pointer an reference types.  i.e you can have a pointer to an object of an abstract type, event though you cannot create an object of this type.  You can use this sort of pointer to point to objects that are of a derived class, like

class AbstractClass
   virtual void Function() = 0;

class ConcreteClass : public AbstactClass;
   virtual void Function() {};

AbstactClass *Ptr; // Pointer to abstract class object.

Ptr = new ConcreteClasss; // Concrete object created, ptr to base used.

>> Is that the case only for C++ or with all other languages.
Is what the case?  

Most languages don't even support objects and some that support objects might not support abstract data types.   But in OOP the term "abstract data type" means a type that cannot be instanciated a an object.  Just not all languages support this feature.

>> how do we declare abstract class?
In C++ the class has to have a pure virtual function.  That's the only way.  If there are no good candidate functions, then make the destrutor pure virtual.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.