Идея базового класса заключается в том, что A
может использоваться, даже если C
не существует. Так где же A
собирается получить y
?
В этих случаях вы используете шаблонный метод шаблон проектирования:
A
предполагает, что наследование классы будут предоставлять y
, требуя, чтобы они реализовали метод get_y()
:
#include <iostream>
class A
{
private :
protected:
virtual int get_y() = 0;
public :
//.....
void x()
{
std::cout << get_y() << std::endl;
}
//.....
};
class B : public A
{
public :
//.....
protected :
//.....
private :
//.....
};
class C : public B
{
public :
//.....
protected :
int get_y()
{
return 10;
}
private :
//.....
};
int main()
{
C obj_c ;
obj_c.x();
}