![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
クラスのメンバ関数が多すぎる場合のデメリットはありますか?
C++ であるクラスを実装してメンバ関数の追加を続けていたところ、メンバ関数の数が数十にまでふくれあがってしまいました。
このようにクラスのメンバ関数の数が多くなってしまった場合、パフォーマンス上でデメリットがありますでしょうか。
私としては、メンバ関数分だけメモリを食う、クラスのコピーが遅くなる、といいた点で心配なのですが実際のところどうなのでしょうか?
(メンバ関数は、基本的にはクラスのメンバを操作するものなので、グローバル関数ではなくてクラスのメンバにしておいたほうが分かりやすいかなと思っています。)
No.4ベストアンサー
- 回答日時:
まず大雑把に言うと、メモリ上に置かれたクラスは変数の設計図と関数の実体が含まれます。
インスタンス化されて複数作成される場合でも、変数領域は複数作成されますが、関数の実体はコピーされません。
ですから、メンバー関数が複数コピーされてメモリを食うと言う事はありません。
なので、この話しからだけでは、パフォーマンスやデメリットに直結した事象は見えません。
多分スレ主さんも危惧されているので書き込まれてんだと思いますけど…
そんな小手先の事より、歴代積み上げてしまった関数の是非って言うのの再検討は必要かもしれません。
実際にやってると中々見直せって言われても出来ない事多いんですが息が長いプログラムならばこそ何処かでね。
迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
長く、かつ複数人で使いたいと思っているので設計については、機会を見つけて再検討してみたいと思います。
No.5
- 回答日時:
仮想関数であれば、サイズ的なデメリットはあります。
つまり、大量の仮想関数を持つクラスから継承した場合、基底クラスの仮想関数は、実際に呼び出されるかどうかに関わらずすべてリンクされてしまいます。
ほかのデメリットとしては、メンバ関数が多くなってくると、そのクラスのデータメンバは実質的にグローバル変数化しますね。
迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
クラスのメンバ変数は確かに実質的にはグローバル変数のような扱いになってしまってきています。
この点も考え再検討したいと思います。
No.3
- 回答日時:
仮想関数だとほぼ選択の余地がないので, おそらく仮想でないメンバ関数と非メンバ関数との比較において, ですよね? だとしたら, パフォーマンスの問題はないといっていいです.
ただ, #1 も言われているようにクラスの設計に問題がある可能性がないとはいえないので, そこには気を付ける必要があるかと. まあ, しょうがないときはしょうがないんですが....
迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
設計という意味では再検討してみたいと思います。
No.2
- 回答日時:
C++は詳しくはありませんが…
>私としては、メンバ関数分だけメモリを食う、クラスのコピーが遅くなる、といいた点で心配なのですが実際のところどうなのでしょうか?
メンバ関数が増えたところで、上記は変わらないハズです。
# メンバ変数が増えれば関係するでしょうが。
MFCのCWndクラスもそれなりのメンバ関数持っているんではないか…と。
大変迅速にご回答いただきまして大変ありがとうございました。
当初心配していた意味でのデメリットは無いことがわかりました。
パフォーマンスが重要ものだったので一応安心しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# 課題でどうしてもわからない問題があったので教えてほしいです、、 メンバ関数add_accept_st 3 2022/06/04 12:23
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- 会社・職場 一人のメンバだけに土日出勤がある面倒な作業を丸投げ、一方で、上司とそれ以外の同僚達はそのメンバだけハ 4 2023/07/21 10:31
- C言語・C++・C# C言語 2 2022/07/21 00:02
- LINE LINEの友だちでブロック削除したかどうかの確認をする方法はありますか? 過去に誰を削除したか忘れて 2 2023/05/09 09:46
- Excel(エクセル) Excelで全クラスのランキング表を作成したい 4 2022/05/24 15:28
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- いじめ・人間関係 いじめって当事者同士の争いで学校とかってはっきりいって被害者でないの? 3 2022/04/07 19:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どこからも呼ばれていない無意...
-
クラスのプロパティに構造体を...
-
3年間同じクラスになる確率
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
main()を持つクラスが2つ以上...
-
エクセルのデータ振り分け方法...
-
共通で使う関数を集めたクラス...
-
内部クラス?のエラー
-
河合塾のクラス分けについて
-
構造体とクラスの違い
-
自作のクラスファイルがインポ...
-
jquaryでクリックしたときにク...
-
1 つのヘッダファイルに複数の...
-
「天声人語」をインターネット...
-
ネットワークアドレスについて
-
Cstring(日本語含む)をcharに...
-
日本では評価をする際、満点を1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
「天声人語」をインターネット...
-
java eclipse 型に解決できません
-
グローバルIPとプライベートIP...
-
ポータブル電源を買おうと思う...
-
容姿について
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
UMLのクラス図はmain()も含むん...
-
同一パッケージにあるクラスが...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
アルキメデスの大戦の櫂はなぜ2...
-
dllと同じプロジェクトにする方法
-
IPアドレスの3バイト目の呼び方
-
3年間同じクラスになる確率
-
重複エラーを解決するには
-
同じパッケージ、クラス名が含...
-
コンボボックスのマウスホイー...
-
共通で使う関数を集めたクラス...
おすすめ情報