Really well explained Mridula, Not only that, what is commendable is you practically didnt leave any info about static members, and you structured it well.

few things :-
1)3. We can have same named static variables in 2 different functions and are
differntiated by their name that is stored in Data segment. Compler does name
mangling to differentaite them.


what do you mean by name mangling????

2) 3. We cannot initialise the static members inside the class declartion. So, if we
declare a class in a .h file, usually initialization is done in the respective .cc file.


is it compulsory to have it in .h file? or its what people do?
also is .cc and .cpp same?

3) But still static const array has to be initialized outside class as below and not in the class declaration as shown in the above example :

const int Abc::count[3] = {80,90,100};


if by mistake i havent initialized it, and i try to access it, is it compile time error or it takes its default value?

4) 3. Non-Static member functions can call Static Member functions using this pointer.
void Abc::display()
{
this->func(); //calling static function
}


can i do the same without using this pointer? I mean its static function belonging to the same class, so can i call it directly, since its not associated with any instance?

5) 5. Static member functions are inherited but can not be overidden.

But this can be (i.e. overiding) achieved by calling a non-static virtual member function wrapper of a Derived class from a Base class pointer as below:


I understood the code, how its being overiden, but i have no clue what you mean by member function wrapper of a derived class....?

Thanks a lot, great post. Added Rep.