見出し画像

【C++練習日記2】ヘッダーファイルの作成。分割コンパイル

こんにちは('ω')ノ

脱C++初心者を目指して今日もC++のお勉強をしていました。
前回はC++のクラスについて勉強しました。

参考にしている書籍は「猫でもわかるC++」です。

ヘッダーファイルとメインファイルを分ける

C++はソースコードから計算実行できる実行形式ファイルに変換する必要があります。これをコンパイルと言います。

コードが長くなるとひとつのファイルに全てを記述するのではなく、機能ごとにファイル分けしておく方が汎用性も高く、管理がしやすいため今回はソースファイルを複数に分割したプログラムを書きました。

■ヘッダーファイルには基本的に関数宣言やクラス定義だけを書いておきます。
sample.h

#ifndef _SAMPLE_H_
#define _SAMPLE_H_

//
class CSample
{
public:
	void set(int num);  
	int get();
private:
	int m_num;
};

#endif //_SAMPLE_H_

モジュールファイルとしてsample.cppとし、ここにはクラス内の関数を書きます。冒頭にヘッダーファイルをインクルードして元のクラス定義を参照します。

sample.cpp

#include "sample.h"

void CSample::set(int num)
{
	m_num = num;
}

int CSample::get()
{
	return m_num;
}

後は、main.cppでメインファイルを作成するだけです。

main.cpp

#include <iostream>
#include "sample.h"

using namespace std;

int main()
{
	CSample obj;  // CSampleクラスのインスタンス化
	int num;

	cout << "整数を入力してください:";
	cin >> num;


	obj.set(num);  // CSampleのメンバ変数をセット
	cout << obj.get() << endl;  // メンバ変数の値を出力

	return 0;
}

CSample obj;はクラスのインスタンス化を行っている部分です。
obj.set(num)とobj.get()でクラス内のメンバ関数にアクセスしています。

分割コンパイル

今回は以下の3つのファイルがあります。

- sample.h :クラス定義のヘッダーファイル
- sample.cpp :クラス内メンバ関数の定義のファイル
- main.cpp :メインファイル

これらすべてをコンパイルして、さらにそれぞれのリンクで結合する必要があります。

最近ずっとPythonしか触ってきてないため、コンパイルというのを忘れていましたね・・・・・C++のコンパイルはこちらを参考にしました。

まずはmainファイルからオブジェクトファイルを作成します。

 g++ -c main.cpp -o main.o

そうするとmain.oというオブジェクトファイルが生成されます。

次にsample.cppのオブジェクトファイルを生成します。

g++ -c sample.cpp -o sample.o

最後に、2つのオブジェクトファイルをコンパイルしてリンクさせます。
これをリンカーと言います。

g++ sample.o main.o

そして、./a.outを実行すれば完成('ω')ノ

./a.out 

こんな感じですね。

画像1

本日は以上です_(._.)_

Twitter➡@t_kun_kamakiri
Instagram➡kamakiri1225
ブログ➡宇宙に入ったカマキリ(物理ブログ)
ココナラ➡物理の質問サポートサービス
コミュニティ➡製造業ブロガー

この記事が気に入ったらサポートをしてみませんか?