two very simple question with OOP thank advance

Started by
6 comments, last by tBoai 17 years, 6 months ago
{ public: bool Windowed; uint16 Width; uint16 Height; uint8 Depth; uint Frequency; /////////////////////////////// why this cmode function havent return type? CMode(void) { Windowed=false; Width=0; Height=0; Depth=0; Frequency=0; } CMode(uint16 w, uint16 h, uint8 d, bool windowed= true, uint frequency = 0) { Windowed=windowed; Width=w; Height=h; Depth=d; Frequency=frequency; } }; //////////////////////////////////////////why these function had assign = 0; ??? virtual void flush() = 0; /** set the number of VBL wait when a swapBuffers() is issued. 0 means no synchronisation to the VBL * Default is 1. Values >1 may be clamped to 1 by the driver. */ virtual void setSwapVBLInterval(uint interval) =0; /// get the number of VBL wait when a swapBuffers() is issued. 0 means no synchronisation to the VBL virtual uint getSwapVBLInterval() =0;
Advertisement
CMode::CMode() is what's called the constructor of the object. This is a function that is called when an instance of that object is created. Since it's frequently used like this:

CMode *mode = new CMode(); < -- That calls the constructor!

It can't return a type, not even void, so it doesn't have a type. Same goes for the destructor, which is ~CMode() and is called when an object is deleted or goes out of scope.

Why some functions are being assigned to 0 is a bit of a C++ quirk. Only functions defined (at least AFAIK) with the virtual keyword can have this. This means that the function is pure virtual. This means that later on, when another class inherits from CMode, it will write that function, but until then, CMode simply doesn't have that function. This has the side effect of making it that you can't have instances of CMode. Period. However, it's now an abstract class (one that you can't make instances of, because it's not complete (ie: the missing function)) and classes that inherit from it will be able to be made.

I'm guessing that most of this is beyond what you have learned so far (especially the part about the pure virtual functions). That's fine, you'll learn it eventually. It's good to see that you've noticed these odd things instead of just blindly copy-and-pasting the code knowing that "it just works".
Neither is CMode() a function, nor is the =0 an assignment in traditional sense.

The first one is the syntax for a "constructor", i.e. a method that initializes the state of the object just after its allocation. A constructor is named like the class/struct it initializes. There is also the opposite, a "desctructor", to be determined that is is written like a contructor but with a leading tilde ~ (and, moreover, a desctructor must not have arguments).

And the other thing: It means that the function flush() is not only virtual but "pure virtual". That means that at this point of code only the function's declaration but not its implementation (i.e. function body) is known. Look up for "polymorphism" and "pure virtual functions".
class CMode{public:    bool Windowed;    uint16 Width;    uint16 Height;    uint8 Depth;    uint Frequency; /////////////////////////////// why this cmode function  havent return type?    CMode(void)     {         Windowed=false;        Width=0;        Height=0;        Depth=0;        Frequency=0;    }    CMode(uint16 w, uint16 h, uint8 d, bool windowed= true, uint frequency = 0)    {        Windowed=windowed;        Width=w;        Height=h;        Depth=d;        Frequency=frequency;    }};


ok just tidied that up and think class CMode was missing at the start, when you post code you can put it beetween
or
and it stays readable.

Now to answer you questions, the CMode() function doesnt have a return type because its the constructor for the class i.e it doesnt have to return anything (not even void) because its job is soly to initialize the CMode class. Second the = 0 is theire to say "i'm not going to write any code for this function write now when someother class inherits from this one it can write the flush() function instead"

Hope that helps
lol seems everyone said same thing at same time lol
Quote:why this cmode function havent return type?

CMode is a constructor, which do not return a type; the only thing that a constructor may return is an error via "throw".

Quote:why these function had assign = 0;

This means its a pure virtual function that a derived class must define. Due to this being pure virtual an instance of the class can not be created.

Have a look at the C++ course which is ongoing on this board, it may help your understanding of C++.
http://www.gamedev.net/community/forums/forum.asp?forum_id=76
Quote:Original post by Julian90
lol seems everyone said same thing at same time lol


oops :)
thanks thanks thanks too much every goodness people~ im be respectful readed every post at here~ thanks everyone again~ again!

i was read the cpp book~ but my english ability not well~ so i cant figer that out easily~

This topic is closed to new replies.

Advertisement