ただ、Google Test ではこの間違いにコンパイル時に気付けるようになってます。
その部分のコードがこちら
1 2 3 |
private : struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; } |
override つけたらいいやんって話ですが、まぁ…つけない人もいるわけで…
そんな人でもすぐに間違いに気付けるのがこのイディオムです。
サンプルコード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class A { public : virtual void SetUp() {} private : struct Setup_should_be_spelled_SetUp {}; virtual Setup_should_be_spelled_SetUp* Setup() { return 0; } }; class Override : public A { public : void Setup() override {} void setup() override {} }; class NoOverride : public A { public : void Setup() {} void setup() {} }; int main() { return 0; } |
override 付けた方は当然 Setup も setup もコンパイルエラーになります。
一方、override 付けなかった方も Setup がコンパイルエラーになっています。
いやー賢いですね。勉強になりました。
0 件のコメント:
コメントを投稿