Menu
Coddy logo textTech

ヘッダーファイルとソースファイル

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 ファイルはそれがどのように動作するか(実装)を定義します。

challenge icon

チャレンジ

中級

ヘッダーファイルとソースファイルに分割された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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン