特集PC技術

C++言語学習録

 

第3回 ファイルを分割してみよう

1つのファイルに全てのソースコードを書くことがないと思うので
分割してそこから実行ファイルを作る方法について調べてみることにした。
この後継承についてやろうと思うので、その準備も踏まえておこう。

目次

[1] ソースコードを用意する。

まずは、ヘッダーファイルを用意する。
ここには、クラスの定義を書いておく。

Mammal.h
#include <iostream>
#include <string>
using namespace std;

class Mammal {
    
private:
    string name;
    int age;

public:
    Mammal(string tmp_name, int tmp_age);
    ~Mammal();
    void eat();
};
Mammal.cc

続いて、ソースコードファイルにコンストラクタやメソッドの実体を書いておく。

// 自身で定義したヘッダーをインクルード
#include "Mammal.h"
// コンストラクタ
Mammal::Mammal(string tmp_name, int tmp_age){
    name = tmp_name;
    age = tmp_age;
}
// デストラクタ
Mammal::~Mammal(){
    
}
// メソッド
void Mammal::eat(){
    cout << name << " is eating" << endl;
}
hello.cc

続いてメイン関数を含むファイルを用意する。

#include "Mammal.h"

int main() {
    // 別ファイルで定義したクラスを使って動かしてみる。
    Mammal *mammal;
    mammal = new Mammal("hopsii",10);
    mammal->eat();
    
    return 0;
}

こんな感じで準備完了です。

[2] これをコンパイルしてみよう

複数のファイルをコンパイルする方法ですが、g++コンパイラを使っているようなのでちょっと苦戦した。

user_name@c_study:~/workspace $ g++ hello.cc Mammal.cc -o hello2
user_name@c_study:~/workspace $ ./hello2
hopsii is eating
user_name@c_study:~/workspace $

今までやっていたことにファイルももう一度増やしてやればいいわけですか。
でも、これだと毎回入力するのが面倒で嫌ですね。なんか短縮する方法ないかな。

[3] Makefileを用意しよう

簡略化する方法ないかなと調べていたところありましたね。
コマンドを実行するファイルを用意しておいて[make]コマンドを使うだけ。
これは相当便利な機能です。

# make とすると下記を実行する
# ターゲット : 依存ファイル
hello: hello.o Mammal.o
	g++ -Wall -o hello hello.o Mammal.o 
Mammal.o: Mammal.cc
	g++ -Wall -c Mammal.cc 
hello.o: hello.cc
	g++ -Wall -c hello.cc
# make clean と打つと下記が実行される
clean:
	rm -f *.o hello

このファイルを書くときの注意点なのですが、
インデントがかかっているところ(上のソースコードで強調されているところ)は
スペースではなくてタブをいれないとエラーになる模様。

user_name@c_study:~/workspace $ make
g++ -Wall -c hello.cc
g++ -Wall -o hello hello.o Mammal.o
user_name@c_study:~/workspace $

統合開発環境なんかはこのような機能を使ってやっているのでしょうかね。

[4] 更新履歴

日付 詳細
2014/10/16 新規作成

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1890

pagetopこのページの先頭へ戻る