前回
【C++】CMakeでC++のプログラム入門〜クラスを使ったプログラム〜
C++でのクラスを使ったプログラムの作成の続きで、コンストラクタとデストラクタについて。
プログラム
ディレクトリ構成
┣ main.cpp
┣ Calc.h
┣ Calc.cpp
┣ CMakeLists.txt
┗ build
Calc.h
[cpp]#ifndef _CALC_H_
#define _CALC_H_
// クラス宣言
class Calc
{
public:
Calc();
~Calc();
void set(int num);
int get();
private:
int m_num;
};
#endif // _CALC_H_
[/cpp]
Calc.cpp
[cpp] #include "Calc.h"#include <iostream>
using namespace std;
// コンストラクタ
Calc::Calc()
{
cout << "インスタンス生成" << endl;
}
// デストラクタ
Calc::~Calc()
{
cout << "インスタンス破棄" << endl;
}
void Calc::set(int num)
{
m_num = num;
}
int Calc::get()
{
return m_num;
}
main.cpp
[cpp] #include "Calc.h"#include <iostream>
using namespace std;
int main(){
cout << "数字を入力" << endl;
int num;
cin >> num;
Calc calc;
calc.set(num);
cout << calc.get() << endl;
return 0;
}
CMakeLists.txt
[cpp] cmake_minimum_required(VERSION 2.8)set(sources
main.cpp
Calc.h
Calc.cpp
)
add_executable(Main ${sources})
[/cpp]実行結果
[shell] 数字を入力3
インスタンス生成
3
インスタンス破棄
[/shell]
説明
コンストラクタとデストラクタはそれぞれのタイミングで自動的に呼ばれるメンバ関数。
コンストラクタはインスタンス生成された直後に、
デストラクタはインスタンスが開放される直前に呼ばれる。
Calc.hでそれぞれを定義する。
クラス名と同じ名前のCalc();がコンストラクタ、
チルダをつけた~Calc();がデストラクタの宣言になる。
Calc.cppではメンバ関数を書くときと似たような感じだが、戻り値がないのが特徴。