Я предполагаю, что вы хотите что-то вроде:
function doStuff(food * f) {
f->EAT();
}
И вы хотите, чтобы это вызывало специализированную EAT
, если передан сыр, или неспециализированную форму, если food
В этом случае вам нужна виртуальная функция:
class food {
public:
virtual void EAT();
virtual ~food(); // Any class being used polymorphically should have
// a virtual destructor
}
class cheese : public food {
public:
virtual void EAT();
}
Я не совсем уверен, что вы имеете в виду, не облажая переменную bytesLeft
.Это открытый элемент данных, поэтому любой код может изменить значение переменной так, как вы этого не ожидали.Сюда входит код в классе cheese
, но также и код, которого нет ни в одном из классов.
Если вы хотите запретить изменению члена bitesLeft
в коде метода cheese.EAT
, вам следует объявитьэто как private
в базовом классе.