C++で親クラスのメソッドを呼び出す方法【基底クラスのメンバ関数呼び出し】

C++にはJavaのようなsuperキーワードが無いため、親クラスの関数を呼び出す場合は、親クラスの名前をスコープ解決演算子::で明示する必要があります。

以下のサンプルコードのようにCat::call()と記述する必要があり、super.call()記法は使えません。

using namespace std;

struct Cat {
   virtual string call() { return "にゃー!"; }
};

struct NyalCat : Cat {
   string call() override {
      // Javaのsuper.call()に相当
      string nyaa = Cat::call();
      return "うー!" + nyaa;
   }
   
   // typedefでsuperキーワードを独自定義することもできる
   typedef Cat super;
   ///using super = Cat;
   void say() { cout << "Let's" << super::call(); }
};

int main() {
   cout <<     Cat().call(); //      "にゃー!"
   cout << NyalCat().call(); // "うー!にゃー!"
   NyalCat().say();          // "Let'sにゃー!"
}

あまり一般的ではありませんが、typedef Cat super;またはusing super = Cat;という形でsuperキーワードを独自に作ることも可能です。

まとめ

  • (」・ω・)」うー!
  • (/・ω・)/にゃー!
広告
広告