No.1ベストアンサー
- 回答日時:
名前空間とヘッダファイルは全く違います。
おそらく考え違いしているものと思われます。
思い切りわかりやすく説明すると(逆にわかりにくくなってしまったらごめんなさい)、
名前空間はクラスをグループ化するものです。グループ化することによってクラス名が同一であっても別グループであれば区別することができます。
ヘッダファイルはcppファイルの中身を別のcppファイルに公開するものです。ヘッダファイルがあることによって、あるcppファイル内のクラスや関数を別のcppファイルから利用できます。
例えばsample.hというヘッダファイルを作ります。
この中身は以下の様だとします。
#ifndef __SAMPLE_H__
#include <iostream>
namespace nsp1{
class samplecls{
public:
void print(){
std::cout << "nsp1::samplecls" << std::endl;
}
};
};
namespace nsp2{
class samplecls{
public:
void print(){
std::cout << "nsp2::samplecls" << std::endl;
}
};
};
#endif // __SAMPLE_H__
cppファイル側は以下のようにします。
#include <stdio.h>
#include "sample.h"
int main(int argc, char* argv)
{
nsp1::samplecls cls1;
cls1.print();
nsp2::samplecls cls2;
cls2.print();
return 0;
}
同じクラス名が同一名前空間にあるとエラーが発生しますが、
名前空間を別にすることで同じクラス名を定義できています。
従ってヘッダファイルによって名前空間を代用することはできないし、名前空間によってヘッダファイルを代用することはできません。
No.4
- 回答日時:
Cとの互換性でこうなっているというのが大きな理由と思いますが、用法/考え方としては、
ヘッダファイルはファイル構成の問題で、名前空間は論理構成の問題。
設計上「クラスをどう分類/整理するか」が名前空間で、
管理上「クラスをどう配置するか」がヘッダファイル、ですかね。
通常は、設計した単位で分割して管理(開発)すると思うでしょうが、
C++の名前空間は、例えばJavaのpackage等と異なり
同一ファイル内で複数を定義できますので、例えばちょっとしたものでも、
ネストした名前空間などで階層的な整理/分類が可能です。
例えば、
// foo.hpp
namespace foo {
namespace detail { }
namespace impl { }
// foo本体
namespace ex { }
}
可読性もありますが、C++の名前空間は閉じていないため、
この手の「ちょっとした名前空間わけ」はそれなりに意味がありますし、
こんなのを個別にファイルやディレクトリに分けていたのでは、管理が面倒で仕方ありませんし。
No.3
- 回答日時:
C++のベースであるCには名前空間はありません。
しかし、共通な定義をヘッダにしておき、#includeして使用するという概念は最初からあります。C++が登場した時には名前空間はありませんでしたが、何年かしてから追加されています。
比較的新しいオブジェクト指向言語なら、importするだけ、のような理解しやすい仕様にもできるのですが、C++はCと高い互換性を保っていなければならないですし、クラスや名前空間は必ず使わなければならないものではないので、それぞれが独立しています。
No.2
- 回答日時:
No.1です。
すいません。#ifndef __SAMPLE_H__
の下の行に
#define __SAMPLE_H__
を書き忘れてました。無くてもサンプルは動きますが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(家族・家庭) 義理母に週に三回程、一時間半程度4歳の子どもを預かってもらっています。 心配なことがあります。 1、 5 2023/04/12 00:46
- 哲学 普遍神って? 7 2022/09/13 04:48
- 父親・母親 何十回言っても覚えない母にイラ立ちます。 母は下記の3つの名前を毎回間違えて呼びます。 100円SH 4 2023/03/31 18:12
- 物理学 真空の質量 3 2023/02/25 11:20
- Outlook(アウトルック) OUTLOOKの宛先の候補の編集 1 2023/05/01 16:27
- 哲学 キリストは勝手に人間イエスとなり 磔に遭った――ここに チカラが・・・ 1 2023/04/12 04:34
- 文学・小説 かなり前に読んだ小説の題名が思い出せなくて困ってます。漠然とした曖昧な記憶ですが、心当たりのある方い 1 2022/05/21 15:22
- 英語 英語についてです。 写真の空欄はAが正解なのですがBが不正解になる理由がわかりません。 どちらも「〜 3 2022/07/05 05:49
- 掃除・片付け 生前整理、遺品整理 空き家になった家を片づけています。 例えば下駄箱 例えばタンス 例えば水屋 中身 1 2022/12/02 12:59
- 会社・職場 考えすぎですか? 旦那の元カノのことを考えてしまいます。旦那は引きずってないしもう嫌いなので安心して 2 2022/10/01 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javax.mailがimportできない
-
javaクラスファイルをEclipseで...
-
Eclipse・プロジェクトで、フォ...
-
classファイルについて
-
Eclipseでデバッグが出来ないエ...
-
eclipse でclassesフォルダーが...
-
『ClassNotFoundException: org...
-
環境変数の取得について
-
FileWriterで8kb以上書き込むに...
-
jdbcドライバのjarファイルにク...
-
「メイン・マニフェスト属性が...
-
「削除するか、クラスパスの正...
-
org.apache.tools.zip.* を使っ...
-
earファイルを展開する方法
-
struts.jarファイルについて
-
名前空間とヘッダーファイル
-
【Eclipse】パッケージ・エクス...
-
SVFの設定について:クラスパス...
-
eclipseでjarファイル内のリソ...
-
Eclipse「リフレッシュ」と「ク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipse・プロジェクトで、フォ...
-
classファイルについて
-
javaクラスファイルをEclipseで...
-
Eclipse「リフレッシュ」と「ク...
-
SVFの設定について:クラスパス...
-
eclipse でclassesフォルダーが...
-
【Eclipse】パッケージ・エクス...
-
earファイルを展開する方法
-
EclipseでHTTP404エラーが出る。
-
jdbcドライバのjarファイルにク...
-
プログラム実行の際に、「ソー...
-
「メイン・マニフェスト属性が...
-
「削除するか、クラスパスの正...
-
コンパイルをしようとするとエ...
-
java クラスファイルとソースコ...
-
『ClassNotFoundException: org...
-
javax.mailがimportできない
-
ResourceBundleクラスの使い方
-
macでのファイル場所指定
-
「main メソッドを持つクラスが...
おすすめ情報