why do you define all these pure virtual functions?