Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

privateな仮想関数

タグ: C++

仮想関数のアクセス制限をprivateにしてはならない。
そうすればprivateに関して知るべきはそのクラス自身のみとなり、基底クラスについて派生クラスが気に病まなければならない部分から完全に抜き去ることができるのだから――

というようなことをどこかで読み、「なるほど一理ある」と今までそれに従って過ごしてきたのだが、どうもgoogleの検索結果を見回した限りではこの考えは劣勢らしい。

たしかにNVIイディオム(名前付いてたのかこの手法)を使うときに純粋仮想関数をprotectedにするのは何か中途半端な感じはしていた。
派生クラスで実装するとはいえ、派生クラスからその関数に直接アクセスすることはないのだから。

C++の規格では、メンバアクセス制御で制御されるのは、メンバ及び基底クラスへのアクセスであって、可視性ではない。としている。
その点から考えても、純粋仮想関数をprivateにするのは妥当と言える。

今まで仮想関数をprivateに置きたくないと思ってきたことについては、Doxygenがデフォルトの設定ではprivateメンバをドキュメント化しないからということもある。
もっとも、デフォルトの設定では広域関数すらドキュメント化されないので、可視性云々とはまた話が違ってくるのだが。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/32-f1ca9483
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。