virtual functions
templates