プログラム関係の備忘録。技術系記事1000記事以上を目指すブログ

【C++】CMakeでC++のプログラム入門〜クラスを使ったプログラム〜

  • 2018年6月9日
  • 2018年6月9日
  • C++
  • 95view
  • 1件
C++

前回
【C++】CMakeでC++のプログラム入門〜キーボードからの入力結果を出力〜
今回はクラスを使ったプログラムの入門。

プログラム

ディレクトリ構成

ディレクトリ
┣ main.cpp
┣ CMakeLists.txt
┗ build

main.cpp

#include <iostream>
  
using namespace std;

// クラス宣言
class Calc
{
public:
    void set(int num);
    int get();
private:
    int m_num;
};

// クラスの実体
void Calc::set(int num)
{
    m_num = num;
}

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

// main処理
int main(){
    cout << "数字を入力" << endl;
    int num;
    cin >> num;

    Calc calc;
    calc.set(num);
    cout << calc.get() << endl;

    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(sources
    main.cpp
    )
    
add_executable(Main ${sources})

実行結果

やっていることは前回と同様、キーボードから入力した数字を出力する。

説明

まず、クラス宣言の部分
class Calc{}で計算クラスを宣言

計算クラスにはpublicなメンバ関数であるset()とget()が存在。
また、privateなメンバ変数m_numも存在する。

そのクラスの実体部分は
void Calc::set(int num)
{
m_num = num;
}

int Calc::get()
{
return m_num;
}
の部分。

set関数は引数にint型numを持っていて
numをm_numに代入する値を返さない関数。

get関数はm_numを返す関数。

メイン処理が書かれているmain()部分では、
Calcクラスのインスタンスを生成し、calcという名称を付ける
Calc calc;
Calc型のset関数を呼び出し、引数にキーボードから入力したnumを渡す。
calc.set(num);
Calc型のget関数を呼び出し、結果をコンソールに出力する。
cout << calc.get() << endl;

Tips

get関数がm_numを返していることだけを見ると、main.cppの中でCalcクラスのインスタンスを生成し、
cout << m_num << endl; とすれば早いようですが、m_numのアクセス指定子がprivateになっているので、この場合m_numはクラス外であるmain.cppからアクセスができません。

プログラムファイルを分ける

上記では、入門としてわかりやすいよう一つのファイルにまとめて記述したが、実際にはクラスの定義をするファイル、クラスの実体を書くファイル、メイン処理のファイルは分けておく。

ファイルを分割する場合の記述の仕方と、CMakeListsで複数ファイルを読み込む方法を以下にまとめる。

ディレクトリ構成

┣ main.cpp
┣ Calc.h
┣ Calc.cpp
┣ CMakeLists.txt
┗ build

Calc.h

#ifndef _CALC_H_
#define _CALC_H_

// クラス宣言
class Calc
{
public:
    void set(int num);
    int get();
private:
    int m_num;
};

#endif

Calc.cpp

#include "Calc.h"

// クラスの実体
void Calc::set(int num)
{
    m_num = num;
}

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

main.cpp

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

using namespace std;

int main(){
    cout << "数字を入力" << endl;
    int num;
    cin >> num;

    Calc calc;
    calc.set(num);
    cout << calc.get() << endl;

    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(sources
    main.cpp
    Calc.h
    Calc.cpp
    )
    
add_executable(Main ${sources})
分割前と分割後の違いは、ファイルが別でもリンクを通せるように、
main.cpp, Calc.cppでそれぞれCalcクラスを読み込む必要がある。
#include “Calc.h”のように
ヘッダファイルを読み込む。