A function call such as the following:
classname::funcname();
is a qualified call. Qualified disambiguate function names. They are needed, for instance, in a class that inherits from several base classes, each of which having functions with identical names. Consider:
struct B1{ int f();};struct B2{ int f();};class D: public B1, public B2 {public: // f() is ambiguous in class D int g() {B2::f();} //qualified call resolves the right f()};
Another use of qualified calls is to bypass the virtual call resolution mechanism. Suppose you have a virtual function f() in a base class that is overridden in a derived class. To invoke the base’s f() in the derived class, you need to use the qualified call base::f(). In this case, the call is resolved statically, not dynamically.