オーバーライドする場合、基本クラスの仮想関数を呼び出すことはできますか? 質問する

オーバーライドする場合、基本クラスの仮想関数を呼び出すことはできますか? 質問する

たとえば、クラスがありFooBar次のように設定されているとします。

class Foo
{
public:
    int x;

    virtual void printStuff()
    {
        std::cout << x << std::endl;
    }
};

class Bar : public Foo
{
public:
    int y;

    void printStuff()
    {
        // I would like to call Foo.printStuff() here...
        std::cout << y << std::endl;
    }
};

コードに注釈を付けたように、オーバーライドしている基本クラスの関数を呼び出せるようにしたいと思います。Java には構文がありますsuper.funcname()。これは C++ でも可能ですか?

ベストアンサー1

C++ では、派生クラスのメソッドを呼び出す際に、ベースクラスを明示的に指定する必要があります。これは、派生クラスのどのメソッドからでも実行できます。オーバーライドは、同じ名前のメソッドの特殊なケースです。Java には多重継承がないため、ベースクラスに一意の名前を付ける super を使用できます。C++ の構文は次のようになります。

class Bar : public Foo {
  // ...

  void printStuff() override {  // help the compiler to check
    Foo::printStuff(); // calls base class' function
  }
};

おすすめ記事