Archived

This topic is now archived and is closed to further replies.

Brian Jones

Instantiating a class

Recommended Posts

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???

Share this post


Link to post
Share on other sites
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 class

class 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?

Share this post


Link to post
Share on other sites
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 !

Share this post


Link to post
Share on other sites
Guest Anonymous Poster

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;

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites