VisualStudio2017でC++を使ったプログラムの勉強。
今回はクラスの作り方とそのクラスのインスタンスの生成を学びましたので、備忘録として残しておきます。
まず適当なプロジェクトを作成します。
作成したプロジェクトの上で右クリックをし、「追加」の「クラス」のタブを押します。
クラス名を入力して「OK」を押すと、自動的に.hファイルと.cppファイルがプロジェクトに作成されます。
あとはプログラミングを書いていきます。
CSample.h
#pragma once
class CSample {
public:
void set(int num);
int get();
private:
int m_num;
};
CSample.cpp
#include "CSample.h"
void CSample::set(int num)
{
m_num = num;
}
int CSample::get()
{
return m_num;
}
Main.cpp
#include <iostream>
#include "CSample.h"
using namespace std;
int main() {
CSample obj;
int num;
cout << "整数を入力してください。" << endl;
cin >> num;
obj.set(num);
cout << "入力した文字は";
cout << obj.get() << endl;
system("pause");
return 0;
}
クラスを作成することのメリットの一つは、そのクラスに基づいたインスタンスを複数作ることができることにあります。
複数のインスタンスの生成の場合
#include <iostream>
#include "CSample.h"
using namespace std;
int main() {
CSample obj1,obj2;
int num;
cout << "整数を入力してください。" << endl;
cin >> num;
obj1.set(num);
cout << "もう一度整数を入力してください。" << endl;
cin >> num;
obj2.set(num);
cout << "最初に入力した文字は";
cout << obj1.get() << endl;
cout << "次に入力した文字は";
cout << obj2.get() << endl;
system("pause");
return 0;
}
実行結果
整数を入力してください。
7
もう一度整数を入力してください。
2
最初に入力した文字は7
次に入力した文字は2
このプログラムでは、obj1およびobj2という二つのインスタンスを作っています。実行結果からわかる通り、同じメソッドにアクセスし、同じメンバ変数に値を入れていますが、それぞれの実行結果は異なります。
これは、同じ名前のメンバ変数、メンバ関数であっても、インスタンスが異なれば別物であることを意味します。例えば、obj1.set(1)とすれば、obj1のm_numが1になりますが、obj2のm_numにはなんら変化は起こりません。
同様に、obj1.get()を実行しても、値がとられるのはあくまでも、obj1.m_numであり、obj2とは、なんら関係ありません。このように、同じ名前がついたインスタンス変数やインスタンス関数であっても、インスタンスが異なれば別物であるというのが、オブジェクト指向最大の特徴です。