    #include <stdio.h>

    class Base
    {
	public:
        void basefunc();
        virtual void vfunc();
//      void vfunc();
    };

    void Base::basefunc()
    {
        vfunc();
    }
    void Base::vfunc()
    {
        printf("Base vfunc()\n");
    }

    class Derived : public Base
    {
	public:
        void derfunc();
        void vfunc();
    };
    void Derived::derfunc()
    {
        this->Base::basefunc();   
        Base::basefunc();    
        basefunc();          
    }
    void Derived::vfunc()
    {
        printf("Derived vfunc()\n");
    }

main()
{
    Derived *obj = new Derived();

    obj->basefunc();
    obj->derfunc();

    //Base::basefunc();   error: cannot call non-static member function
	return 0;
}

