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キーワードを独自に作ることも可能です。
まとめ
- (」・ω・)」うー!
- (/・ω・)/にゃー!