Advertisement

Instantiating a class

Started by July 01, 2001 02:10 PM
5 comments, last by Brian Jones 23 years, 3 months ago
Could someone please explain what instantiating a class, and what an instance of a class means? Im not really sure what it means. Somebody said that if you have a class called Bus, and you create an object Bus driver; you are instantiating class Bus. And by instantiating the class, you are allocating memory for all the data members in that are in class Bus. Im not really sure what that means. He also said that "driver is an instance of class Bus." <--- I definently do know what that means Thank you. Only???
I don't have a signature
Ok... the word ''Bus'' is a concept... embodying a large vehicle, numerous seats, or whatever. Now, see the thing driving down the road full of people? That is an instance of a Bus. An instance is a physical representation of a concept. There can be any number of instances of that concept.

In code terms:

  // This is the Bus concept, embodied as a classclass Bus{int number_of_seats;int colour;int driver;};// Now we make an instance of a Bus, called bus1;Bus bus1;// And another one, called bus2;Bus bus2;  

Note that your original example was incorrect: it doesn''t make sense for driver to be an instance of Bus. Driver is perhaps part of a Bus, but an instance of a Bus is a Bus. With me?

To ''instantiate'' is to ''create an instance''. So, the line "Bus bus1" instantiated a ''Bus'' object called ''bus1''. Just like the line ''int xyz'' instantiates an ''int'' object called ''xyz''.

Is that any help?
Advertisement
It''s quite simple. First you have to create your class :

class bus
{
protected:
const char *driver;
unsigned long seats;
unsigned long capacity;

public:
int showdrivername();
};

But, VC++ can''t use a class in this way, you must create an instance of it. That means the compiler will allocate as for a variable memory to stock the all the data of the class.
In this case, it will allocate memory for the 3 variables (driver, seats, capacity) and for the procedure showdrivername();

You create an instance of a class this way:
for ex: bus *mybus;

This way with your variable mybus, you can use all data members of the class. Ex: mybus->capacity=50;

The class structure is very cool if you have several same objects of the same type. In this case you can have for example 3 buses and assign different value for each one.

Ex:
bus *mybus1;
bus *mybus2;
bus *mybus3;

mybus1->capacity = 100;
mybus2->capacity = 150;
mybus3->capacity = 200;


This is what we call instancing;

hope I was of any help !
(Post removed because other people were faster than I and explained better). Phew... guys, you're fast.

Gaiomard Dragon
-===(UDIC)===-

Edited by - Outworlder on July 1, 2001 3:36:31 PM
Gaiomard Dragon-===(UDIC)===-

quote: Original post by Pixelisator

Ex:
bus *mybus1;
bus *mybus2;
bus *mybus3;

mybus1->capacity = 100;
mybus2->capacity = 150;
mybus3->capacity = 200;



Shouldn''t that be:

bus *mybus1 = new bus;
bus *mybus2 = new bus;
bus *mybus2 = new bus;

Yes, ya''ll are fast. I think I get it. So what you guys are saying, is that instantiating a class is CREATING an object that has access to all public members of that class. And that the compiler will allocate all the memory for all the variables in the class to the object that was created. Is that correct?

Also, why would mybus1, mybus2, mybus3 need to be on the heap?
I don't have a signature
Advertisement
No, instantiating a class has access to all the members of the class. Otherwise there''d be no point to protected and private members. It''s other classes that can''t access the protected and private members.

As for the heap issue, well Pixelisator accidentally confused matters by declaring pointers to Buses instead of actual Buses. When you declare a pointer, you generally then have to create the actual object on the heap. But there is no reason you can''t just have a class on the stack.

This topic is closed to new replies.

Advertisement