【C++】ヘッダファイル / Header File

【C++】
ヘッダファイル / Header File










ヘッダファイルとは


ヘッダファイルは、
  • クラスの設計書に当たるファイル
  • 「クラス名.h」と「クラス名.cpp」の2つのファイルが作成される。
C++のヘッダファイルからは".h"が外された。
C言語のヘッダファイルは、ヘッダフィル名の先頭に「c」が付く。


C++ の標準ライブラリ区分
  • C言語の標準ライブラリ
  • STL (Standard Template Library)
  • その他 (入出力、文字列、数値計算など)



Back



ヘッダファイルの読み込み(インクルード)


#include <標準ライブラリのヘッダファイル名>
#include "同じフォルダ内のヘッダファイル名"


「C++」で「C言語のヘッダファイル」を使用するには、「ヘッダファイル名」の前に「c」を加える。
C言語=#include <stdio.h>
C++=#include <cstdio>
「C++」には、「C++」版「C言語」標準ヘッダファイルが用意されていて、
「C++」版「C言語」標準ヘッダファイルの名前は、
「C言語」の標準ヘッダのファイル名を活用して、先頭に「C」を付けたファイル名になっている。
「C言語」の標準ヘッダの拡張子「.h」も付けません。
「stdio.h」→「cstdio」という標準ヘッダファイルになっています。


Back



ヘッダファイルの宣言と定義


ヘッダファイル内で変数・関数の宣言を行うと、読み込まれた先での宣言と重複することがあるので、宣言と定義はヘッダファイル内では行わない。
変数と関数の宣言だけであれば、重複しても問題ないので、ヘッダファイルでは、定義と代入を宣言とは別にするのが良い。
同じブログラム内では、同じ「宣言」を何度してもエラーにならない。


//宣言のみの場合は、「extern」を記述する。
extern int a;


//関数は、ブロック({})内にプログラムコードを記述しないと宣言のみとなる。
void 関数名(引数・引数);


「extern」は、記憶クラス指定子の一つ。
「extern」を使うことで、変数は宣言のみを行うことができるが、 本来の機能は異なる。

「extern」は、グローバル変数に「外部リンケージ」を持たせることができる。
「外部リンケージ」=グローバル変数をファイルを超えて利用出来る。
「内部リンケージ」=ファイル内部でのみ利用出来る。

「extern」を付けて宣言することで、ファイルをインクルードしたファイル先でも、 その変数を使用可能にするという機能を持っている。

大規模プログラミングでは、「extern」は必須のアイテム。

逆に、記憶クラス指定子「static」は、「内部リンケージ」にする指定子。
「static」を指定子たローカル変数は、スコープを抜けても変数の値がそのまま保持されるので、 カウントなどに利用出来る。

記憶クラス指定子「const」は、変数の値を変更できなくする指定子。


Back



「C++」標準ヘッダ


コンテナ
<array>
<deque>
<forward_list>
<list>
<map>
<queue>
<set>
<stack>
<unordered_set>
<unordered_map>
<vector>
一般
<algorithm>
<any>
<bitset>
<chrono>
<codecvt>
<functional>
<iterator>
<locale>
<memory>
<memory_resource>
<optional>
<ratio>
<scoped_allocator>
<tuple>
<typeindex>
<type_traits>
<utility>
<variant>
文字列
<regex>
<string>
<string_view>
ストリームと入出力
<filesystem>
<fstream>
<ios>
<iostream>
<iosfwd>
<iomanip>
<istream>
<ostream>
<sstream>
<strstream>- deprecated、sstream 推奨
<streambuf>
数値処理
<complex>
<numeric>
<random>
<valarray>
言語支援
<exception>
<initializer_list>
<limits>
<new>
<typeinfo>
診断
<stdexcept>
<system_error>
スレッド
<atomic>
<condition_variable>
<future>
<mutex>
<shared_mutex>
<thread>
標準Cライブラリ
C++において標準Cライブラリのヘッダは、Cと異なった名前になる。
ヘッダ名の末尾から拡張子「.h」を取り除き、先頭に「c」を加える。

例:
「time.h」は、「ctime」
ヘッダ内の宣言は、名前空間「std」の中に置かれるため、
関数や型名には、「std::」を付けて完全修飾することで区別する。
<cassert>
<cctype>
<cerrno>
<cfenv>
<cfloat>
<climits>
<cmath>
<csetjmp>
<csignal>
<cstdlib>
<cstddef>
<cstdarg>
<cuchar>
<ctime>
<cstdio>
<cstring>
<cwchar>
<cwctype>


Back