#include <vector>
class A
{
public:
A() : m_base(0){}
virtual ~A(){}
virtual void set(int n){m_base = n;}
virtual int get() const {return m_base;}
private:
int m_base;
};
class B : public A
{
public:
B() : m_derived(0){}
void set(int n){ m_derived = n;}
int get() const {return m_derived;}
private:
int m_derived;
};
struct Comparartor
{
bool operator()(A* first, A* second) const
{
return first->get() < second->get();
}
};
int main()
{
A* a[2];
A a1;
a1.set(10);
B b1;
b1.set(20);
a[0] = &a1;
a[1] = &b1;
std::sort(a, a+2, Comparartor());
}