このコードを検討してください
class Base
{
public:
virtual void print ()
{
std::cout << "Base::print" << std::endl;
}
};
class BaseA : public Base
{
public:
virtual void print ()
{
std::cout << "BaseA::print" << std::endl;
}
};
class Derived : public Base
{
public:
virtual void print ()
{
Base::print (); // <= this will always call Base::print even if I derive from BaseA
std::cout << "Derived::print" << std::endl;
}
};
int main ()
{
Base* a = new Derived;
a->print ();
delete a;
}
From Derived::print
I を呼び出すのは問題ありませんが、代わりにfromBase::print
を派生させたいと思うまでは、もちろん を呼び出したいと思います。この特定の例での変更は問題ではありませんが、そのような仮想関数が 20 個ある場合はどうなるでしょうか?Derived
BaseA
BaseA::print
Base::print
BaseA::print
それが何であれ、直接の親のバージョンを呼び出すようにコンパイラに依頼する方法print
は?