なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Setter/GetterをC++で

クラスを用いたコーディングをする場合、中にある変数は隠蔽しなくてはならない。JavaからC++に移るとそのへんでいろいろ考えるところがあるらしい。というかまずmain関数を中心にした考え方を離れないといけない。C++でSetter/Getterを作りたくていろいろ試行錯誤。
主に、以下のサイトを参考にした
Set / Get とプロパティ (プログラミング雑記)
C++編(言語解説) 第7章 コンストラクタとデストラクタ

// main.cpp
#include "sample.h"
#include <iostream>

void func();

int main()
{
	func();
	return 0;
}

void func()
{
	CSample obj;     // コンストラクタ
	string str = "Steins;Gate";

        // Set関数…CSampleクラス内のメンバ変数に値を設定
	obj.Set( str );
        // Get関数…CSampleクラス内のメンバ変数から値を取得
	cout << obj.Get() << endl;

	cout << "member function is called !" << endl;

} // ここでデストラクタが呼び出されるらしい
// sample.cpp
#include "sample.h"
#include <iostream>

using namespace std;

// メンバ変数に値を設定するSet関数
void CSample::Set(string str)
{
	this->m_str = str;
}

// メンバ変数を返却するGet関数
string CSample::Get()
{
	return this->m_str;
}

// コンストラクタの定義
CSample::CSample()
{
	cout << "Constructor was called !" << endl;
}

// デストラクタの定義
CSample::~CSample()
{
	cout << "Destructor was called !" << endl;
}
// sample.h
#include <iostream>

using namespace std;

class CSample
{
public:
	CSample();
	~CSample();
	void Set(string str);
	string Get();
private:
	string m_str;
};
# Makefile
CC = gcc
TARGET = ClassTraining
OBJECTS = main.o sample.o
#
all : $(TARGET)
$(TARGET) : $(OBJECTS)
	$(CXX) $(OBJECTS) -o $(TARGET)

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

main.o : sample.h
	g++ -c main.cpp

.PHONY: clean
clean:
	rm -f *.o


なんでこんなしち面倒臭いことをするかと言うと、Setter,Getterを作っておけばそのクラスがまとめていろんな働きをしてくれるからなんですね。