Кажется, я не понимаю, чего ты пытаешься достичь. Похоже, что вы опускаете ключевое слово «virtual» в методе базового класса, который вы пытаетесь переопределить и, следовательно, получаете ошибки от компилятора.
Хотя ваш вопрос довольно неясен, вот моя лучшая попытка продемонстрировать, как реализовать полиморфизм в C ++:
class A {
protected:
// You will not be able to access this in the
// other class unless you explicitly declare it as
// a 'friend' class.
int m_ProtectedVariable;
public:
// Let's define a virtual function that we can
// override in another class.
virtual void ClassMethod( ) {
printf( "[A::ClassMethod] Called!\n" );
}
}
class B : public A {
public:
// There is no need for the virtual/override keywords
// if you are overloading the function which is already defined
// in another class as 'virtual'. I prefer to keep them for
// pedantic reasons.
/* virtual */ void ClassMethod( ) /* override */ {
//
printf( "[B::ClassMethod] Called!\n" );
// Since the function is a virtual, we can always
// call the base class function.
A::ClassMethod( /* ... */ );
}
}
Надеюсь, вы найдете это полезным во всем, что вы пытаетесь достичь: -)
РЕДАКТИРОВАТЬ: В вашем конкретном сценарии, где вы должны выделить буфер, когда вам это нужно, и уничтожить его впоследствии - почему вы не используете функциональность конструктора / деструктора класса?
Было бы гораздо более интуитивно понятно, когда компилятор решает, когда управлять памятью (в данном случае), поскольку это произойдет автоматически, как только ваш объект выйдет из области видимости.