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を作っておけばそのクラスがまとめていろんな働きをしてくれるからなんですね。