pure virtual function.