teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2016/06/21 08:04

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -3,4 +3,52 @@
3
3
  `#include`は、指定したファイルをその位置へ読む込む(展開する)だけの機能です。それ以上でもそれ以下でもありません。従って、classの継承と#includeで読み込んだクラスの使い分けは存在しません。
4
4
 
5
5
  質問されたいことはこのような内容ではないような気もするのですが、質問が抽象的なので良く分かりません。できるだけ具体的に踏み込んでみて頂けないでしょうか?
6
- 継承したクラスの例や、#includeで読み込んだクラスの名前を提示頂けると何かアドバイスできるかも知れません。
6
+ 継承したクラスの例や、#includeで読み込んだクラスの名前を提示頂けると何かアドバイスできるかも知れません。
7
+
8
+ ---
9
+ 【追記】
10
+ どうもmarimo.さんがおっしゃる「クラスの継承」が、本来の意味と異なっているような気がします。
11
+ クラスを継承するとは、例えば下記です。
12
+
13
+ ```C++
14
+ // ↓これは基底クラス
15
+ class Base
16
+ {
17
+ public:
18
+ int BaseX;
19
+ };
20
+
21
+ // ↓Baseを継承したクラス
22
+ class Derived : public Base
23
+ {
24
+ public:
25
+ int DevivedY;
26
+ };
27
+
28
+ // ↓derivedは、Derivedクラスのインスタンスです
29
+ Drived derived;
30
+ ```
31
+
32
+ > 1.クラスを継承することのメリットとして、ひとつのインスタンスから多くのメンバーメソッドにアクセスできることなのではないのでしょうか?
33
+
34
+ そのような事実はないような気がします。
35
+
36
+ クラス自身のメリットは多数ありますが、私はデータ構造とアルゴリズムをセットにできることが一番ありがたいです。
37
+ そして、クラスを継承することで、派生クラスに基底クラスの機能を取り込みつつ、機能を修正できるのでなかなか便利です。また、ポリモーフィズムもたいへん便利です。
38
+
39
+ > 2.機能が違うなら継承はせずに、ヘッダファイルとしておくことで必要なときにincludeをして関数を呼び出す、というイメージであっていますでしょうか?
40
+
41
+ 仰りたいことがよく理解できていませんが、たぶん間違っています。
42
+ 「クラスを継承すること」と「関数呼び出しのためにincludeすること」の間にトレードオフの関係はないと思います。
43
+
44
+ 抽象的に物事を考えると混乱します。具体的に考えましょう。
45
+ そして、ソース・コードはたいへん具体的です。
46
+
47
+ mario.さんが考えている「クラスを継承」しているソースを上記のように記述してみてください。
48
+ 「ひとつのインスタンスから多くのメンバーメソッドにアクセス」している例をソースで提示してみてください。
49
+ 「機能が違うなら」は何と何の機能が違うのでしょうか?
50
+ 「継承はせず」のソース(継承しなかった時のソース)を簡単で良いので書いてみて下さい。
51
+ 「ヘッダファイルとしておくことで必要なときにincludeをして関数を呼び出す」部分も短いソースを提示してみて下さい。ヘッダ・ファイルとそれを#includeして関数を呼び出しているソースの2つです。
52
+
53
+ 恐らく具体的に書く過程である程度整理でき、より的確な質問ができるようになると思います。
54
+ 仮に整理できなかったとしてもソースを提示して質問すれば、ある程度意図が伝わると思います。