С++ наследование. Заменить базовый метод дочерним
Доброго дня суток господа, имеется проблема с пониманием / недопониманием процесс наследования и замены родительских методов на дочерние.
Имеется класс
class TcpServerClientUnit
{
private:
void checkReadyData_();
uint64_t dataAvailable_();
};
//Имеется дочерний класс
class wsServerClientUnit: public TcpServerClientUnit
{
uint64_t dataAvailable_();
}
//Минимально воспроизводимый код.
#include <iostream>
using namespace std;
class parent{
private:
void replacingMethod();
public:
void callReplacingMethod();
};
class child: public parent{
private:
void replacingMethod();
};
void parent::replacingMethod()
{
std::cout<<"Its is parent!"<<std::endl;
}
void parent::callReplacingMethod()
{
replacingMethod();
}
void child::replacingMethod()
{
std::cout<<"I'm a child"<<std::endl;
}
int main()
{
child Child;
Child.callReplacingMethod();
cout << "Hello world!" << endl;
return 0;
}
Имеется задача предопределить метод родительского класса dataAvailable_() дочерним. Установка функции как виртуальной, и указание дочернему методу override не вызывает требуемого результата и все также вызывается экземпляр родительского класса.
Нужно: заменить родительский dataAvailable_() -> дочерним dataAvailable_() Благодарю за помощь.
Ответы (1 шт):
Автор решения: timur
→ Ссылка
class parent {
private:
virtual void replacingMethod();
public:
void callReplacingMethod();
};
class child : public parent {
private:
virtual void replacingMethod() override;
};
//...
child Child;
Child.callReplacingMethod(); //=> I'm a child
virtual - очень важный момент, так как в методе callReplacingMethod this думает, что он (объект) родитель