dポイントプレゼントキャンペーン実施中!

クラスのメンバ関数が多すぎる場合のデメリットはありますか?

C++ であるクラスを実装してメンバ関数の追加を続けていたところ、メンバ関数の数が数十にまでふくれあがってしまいました。
このようにクラスのメンバ関数の数が多くなってしまった場合、パフォーマンス上でデメリットがありますでしょうか。
私としては、メンバ関数分だけメモリを食う、クラスのコピーが遅くなる、といいた点で心配なのですが実際のところどうなのでしょうか?

(メンバ関数は、基本的にはクラスのメンバを操作するものなので、グローバル関数ではなくてクラスのメンバにしておいたほうが分かりやすいかなと思っています。)

A 回答 (6件)

まず大雑把に言うと、メモリ上に置かれたクラスは変数の設計図と関数の実体が含まれます。


インスタンス化されて複数作成される場合でも、変数領域は複数作成されますが、関数の実体はコピーされません。
ですから、メンバー関数が複数コピーされてメモリを食うと言う事はありません。
なので、この話しからだけでは、パフォーマンスやデメリットに直結した事象は見えません。

多分スレ主さんも危惧されているので書き込まれてんだと思いますけど…
そんな小手先の事より、歴代積み上げてしまった関数の是非って言うのの再検討は必要かもしれません。
実際にやってると中々見直せって言われても出来ない事多いんですが息が長いプログラムならばこそ何処かでね。
    • good
    • 0
この回答へのお礼

迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
長く、かつ複数人で使いたいと思っているので設計については、機会を見つけて再検討してみたいと思います。

お礼日時:2010/10/15 23:09

メンバ関数がいくらあろうとも、オブジェクトのサイズには影響しませんので、


質問者さんが心配しているようなデメリットはありません。
    • good
    • 0
この回答へのお礼

迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。

お礼日時:2010/10/15 23:04

仮想関数であれば、サイズ的なデメリットはあります。


つまり、大量の仮想関数を持つクラスから継承した場合、基底クラスの仮想関数は、実際に呼び出されるかどうかに関わらずすべてリンクされてしまいます。

ほかのデメリットとしては、メンバ関数が多くなってくると、そのクラスのデータメンバは実質的にグローバル変数化しますね。
    • good
    • 0
この回答へのお礼

迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
クラスのメンバ変数は確かに実質的にはグローバル変数のような扱いになってしまってきています。
この点も考え再検討したいと思います。

お礼日時:2010/10/15 23:07

仮想関数だとほぼ選択の余地がないので, おそらく仮想でないメンバ関数と非メンバ関数との比較において, ですよね? だとしたら, パフォーマンスの問題はないといっていいです.


ただ, #1 も言われているようにクラスの設計に問題がある可能性がないとはいえないので, そこには気を付ける必要があるかと. まあ, しょうがないときはしょうがないんですが....
    • good
    • 0
この回答へのお礼

迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
設計という意味では再検討してみたいと思います。

お礼日時:2010/10/15 23:04

C++は詳しくはありませんが…



>私としては、メンバ関数分だけメモリを食う、クラスのコピーが遅くなる、といいた点で心配なのですが実際のところどうなのでしょうか?

メンバ関数が増えたところで、上記は変わらないハズです。
# メンバ変数が増えれば関係するでしょうが。

MFCのCWndクラスもそれなりのメンバ関数持っているんではないか…と。
    • good
    • 0
この回答へのお礼

大変迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
パフォーマンスが重要ものだったので一応安心しました。

お礼日時:2010/10/15 23:10

私はパフォーマンスのデメリットはまったく気にならないですね。



むしろ、クラス設計に疑問があります。
本来、オブジェクト指向はメインテナンス性や可用性などが眼目
ですが、ま、それらが失われて寿命の短いクラスではないか、
と心配します。
    • good
    • 0
この回答へのお礼

大変迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
今後設計についてはオブジェクト指向のメンテナンス性を損なわないよう、スマートに作れたらなと思っています。(難しそうですが。。)

お礼日時:2010/10/15 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!