Как вызвать функцию потомка с таким же именем как у родителя (С++)? Недавно начала изучать ООП. Но вот что-то не получается разобраться в этом вопросе. Вот примерный код программы. Как сделать так, чтобы в мэйне вызывалась функция потомка, а не родителя?class tparent { ... public: ... void getdata() { ... } }; class tchild:public tparent { ... public: void getdata() { ... } }; void main() { tchild ob; ob.getdata(); }
Для вызова функции потомка с таким же именем как у родителя, необходимо использовать спецификатор доступа virtual в определении функции в родительском классе. В данном случае функция getdata() должна быть объявлена как виртуальная в классе tparent, чтобы затем в классе tchild переопределить эту функцию.
Пример исправленного кода:
class tparent { public: virtual void getdata() // объявляем функцию как виртуальную { ... } }; class tchild : public tparent { public: void getdata() override // переопределяем функцию { ... } }; int main() { tchild ob; ob.getdata(); // будет вызвана функция из класса потомка return 0; }
При такой реализации функция getdata() из класса потомка будет вызываться при вызове из объекта ob.
Для вызова функции потомка с таким же именем как у родителя, необходимо использовать спецификатор доступа virtual в определении функции в родительском классе. В данном случае функция getdata() должна быть объявлена как виртуальная в классе tparent, чтобы затем в классе tchild переопределить эту функцию.
Пример исправленного кода:
class tparent{
public:
virtual void getdata() // объявляем функцию как виртуальную
{
...
}
};
class tchild : public tparent
{
public:
void getdata() override // переопределяем функцию
{
...
}
};
int main()
{
tchild ob;
ob.getdata(); // будет вызвана функция из класса потомка
return 0;
}
При такой реализации функция getdata() из класса потомка будет вызываться при вызове из объекта ob.