Here are the classes:

BaseClass.h
Code:
class BaseClass
{
    public:
        BaseClass();
        virtual ~BaseClass();
        virtual void printStuff() const;
    protected:
    private:
};
BaseClass.cpp
Code:
BaseClass::BaseClass()
{
    //ctor
}

BaseClass::~BaseClass()
{
    //dtor
}

void BaseClass::printStuff() const
{
    std::cout << "BaseClass" << std::endl;
}
DerivedClass.h
Code:
class DerivedClass : public BaseClass
{
    public:
        DerivedClass();
        virtual ~DerivedClass();
        virtual void printStuff() const;
    protected:
    private:
};
DerivedClass.cpp
Code:
DerivedClass::DerivedClass()
{
    //ctor
}

DerivedClass::~DerivedClass()
{
    //dtor
}

void DerivedClass::printStuff() const
{
    std::cout << "DerivedClass" << std::endl;
}
And here's main():
Code:
int main()
{
    DerivedClass* aDC = new DerivedClass();
    vector<BaseClass*> aVec;
    aVec.push_back( aDC );
    aVec[0]->printStuff();
    delete aDC;
    return 0;
}
When I call printStuff, the DerivedClass's function gets called. Now, if I remove the const part from the DerivedClass's printStuff function, we call the BaseClass's printStuff function. Can anyone explain why this happens? I tried a Google search, but not quite sure how to word this.