ヘッダーファイルとソースファイル
CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 3/104。
C++では、コードは宣言用のヘッダーファイル (.h) と実装用のソースファイル (.cpp) に分割されます。
ヘッダーガード付きのヘッダーファイル (helpers.h)
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endif実装を含むソースファイル (helpers.cpp)
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}main関数内での使用
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}出力:
Hello, Alice!
8ヘッダーガード (#ifndef, #define, #endif) は、ヘッダーが複数回インクルードされるのを防ぎます。.h ファイルは何が存在するか(プロトタイプ)を宣言し、.cpp ファイルはそれがどのように動作するか(実装)を定義します。
チャレンジ
中級ヘッダーファイルとソースファイルに分割された3つのヘルパー関数を作成してください:
helpers.h— インクルードガードを含む関数宣言helpers.cpp— 関数の実装
作成する関数:
greet(name)—"Hello, <name>!"を返しますageInTenYears(age)—age + 10を返しますcheckAdult(name, age)— age >= 18 の場合は"<name> is an adult"を、それ以外の場合は"<name> is a minor"を返します
チートシート
C++のコードは、宣言のためのヘッダーファイル(.h)と、実装のためのソースファイル(.cpp)に分けられます。
インクルードガードは、多重インクルードを防ぎます:
#ifndef HELPERS_H
#define HELPERS_H
// ここに宣言を記述します
#endifヘッダーファイル(helpers.h)には関数の宣言が含まれます:
#ifndef HELPERS_H
#define HELPERS_H
#include <string>
std::string greet(std::string name);
int addNumbers(int a, int b);
#endifソースファイル(helpers.cpp)には実装が含まれます:
#include "helpers.h"
std::string greet(std::string name) {
return "Hello, " + name + "!";
}
int addNumbers(int a, int b) {
return a + b;
}main関数で関数を使用する:
#include <iostream>
#include "helpers.h"
int main() {
std::cout << greet("Alice") << std::endl;
std::cout << addNumbers(5, 3) << std::endl;
return 0;
}自分で試してみよう
#include <iostream>
#include "helpers.h"
int main() {
std::string name;
int age;
std::getline(std::cin, name);
std::cin >> age;
std::cout << greet(name) << std::endl;
std::cout << "In 10 years you will be " << ageInTenYears(age) << std::endl;
std::cout << checkAdult(name, age) << std::endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタ引数付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ詳解Rule of Three / Five / Zeroまとめ - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () 演算子のオーバーロード型変換演算子まとめ:Matrix クラス