ツッコミをうけて、正しいC++のオーバーライドを学んだ話
- S.H.
- 2017年7月17日
- 読了時間: 2分
昨日投稿した記事がさっそくツッコミをいただき、昨日のうちにタイトルを修正しました。
今日は、間違った部分を修正した話をさらっと書いきたいと思いますねー。
まず、基底クラスClangクラスには virtual が、また派生クラスCppクラスには virtual と override がなかったのが昨日の記事での問題点でした。
読んでいたC++本にあったオーバーライドの解説を鵜呑みにしたがための間違いでしたね。
実際の挙動としては hiding であり、オーバーライドではないと親切なツッコミをTwitterにて頂きました。
ちなみに、どこがまずかったかというと、
class Clang { protected: string name; double ver; public: Clang(); void set(string n, double v); void show(); ← ここの void の前に virtual が必要。 ~Clang(); };
class Cpp : public Clang { public: Cpp(); void set(string s, double v); ← void の前に virtual が、; の前に overrideが必要。 void show(); ← void の前に virtual が、; の前に overrideが必要。 ~Cpp(); };
上記のように、必要な記述が抜けていたわけですねー。
で、これを
class Clang { protected: string name; double ver; public: Clang(); virtual void set(string n, double v) virtual void show(); ~Clang(); };
class Cpp : public Clang { public: Cpp(); virtual void set(string s, double v) override; virtual void show() override; ~Cpp(); };
このように virtual と override を書いてやればOKのようです。
個人的には、C++本の内容を鵜呑みにせず、実際にコードを書いて動かしてみることが良いのではないかと今回の一件で思いましたねー。
今後はC++日本語リファレンスやQiitaのC++記事を読みつつ、実際にコードをかいてこうかと思いますねー。
参考記事:
http://qiita.com/yumetodo/items/f3ceb1a64a1540f85568
最新記事
すべて表示最近、C++の勉強がてら競技プログラミングの問題を解くことが多くなった。 で、入力や出力の方法が似たようなコードを毎回書いたりしててた時、 「これ、テンプレートとvector使ったクラスで楽できないかな?」 と思い、さっそく書いてみた。...
ふと、C++のリファレンス読みながら「標準ライブラリだけでも簡単なゲーム作れそう」と思い、さっそく作ってみた。 以前、作ったノベルゲーム風サンプルをもとに作ったので、そんなに時間はかからなかったかな? 作ってみた感想としては、「簡単なゲームブックならこれで十分?」って感じ。...
先日、ウチの地元で開催されていた第三回CoderDojo吉賀に参加してきた。 一応、メンターとしての参加は今回で二回目。前回参加したのは、第一回だったねー。 メンターといっても、チビッ子たちの色んな質問に答えたり、機材の不調をどうにかしたりって感じ。...