Thanks a lot !!
Looks like, coming in from the Java world, I am in for quite a lot of surprise !!
In java this kind of thing would be perfectly acceptable and would run just fine with no "using" like declarations in the derived class !
And also , in Java , hiding applies to static methods (not sure how C++ handles static methods with same signature in base and derived classes) and fields.
Right and if you consciously want to call base func() then easy way is to redefine base method in derived class by:
1) simply call base method using scope resolution operator => gradedactivity::func();
2) or simply __super::func(); //super is a keyword (this will also work for multi-level inheritance)