プログラミング メモ memo.txt

一度考えたコードを忘れるのはもったいないので、メモとして残していきます。現在、JavaとC++とVBAを勉強しているので、そこらへん書きます。

C++ クラスの復習。オブジェクト指向っぽく

f:id:rkprog:20151024010640p:plain

クラスの復習

今回はUserクラスという物を作成し、名前と点数を持たせます。

#include<iostream>
#include<string>
#define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))
using namespace std;

class User{
private:
	string name;
	int score;
	int rank;
public:
	User()
	{
		name = "none";
		score = 0;
	}

	User(string st)
	{
		name = st;
		score = 0;
	}

	User(string st,int a)
	{
		name = st;
		score = a;
	}

	void setscore(int a)
	{
		score = a;
	}

	int getscore()
	{
		return score;
	}

	string getname()
	{
		return name;
	}
};

クラスの最後に;を忘れないように

ここでは、Userクラスの宣言とともに初期化を行う、コンストラクタを定義しています。
コンストラクタはvoidなどの返り値の型を宣言する必要が無いので気を付けてください。(宣言したらビルドエラーでした)


この部分

User()
{
	name = "none";
	score = 0;
}

User(string st)
{
	name = st;
	score = 0;
}

User(string st,int a)
{
	name = st;
	score = a;
}

これで初期化して、名前と点数を呼び出してみようと思います。

ソースコード

#include<iostream>
#include<string>
#define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))
using namespace std;

class User{
private:
	string name;
	int score;
	int rank;
public:
	User()
	{
		name = "none";
		score = 0;
	}

	User(string st)
	{
		name = st;
		score = 0;
	}

	User(string st,int a)
	{
		name = st;
		score = a;
	}

	void setscore(int a)
	{
		score = a;
	}

	int getscore()
	{
		return score;
	}

	string getname()
	{
		return name;
	}
};

int main()
{
	User a("taro",60);
	cout<<"name:"<<a.getname()<<" score:"<<a.getscore()<<endl;

	return 0;
}

実行結果

f:id:rkprog:20151024003419p:plain

こんな感じです。名前のみの場合

f:id:rkprog:20151024003523p:plain

と点数が0になっているのが分かるかと思います。
(欠席した場合、0点的な・・・)


複数人にした場合

int main()
{
	User taro("taro",60);
	User hanako("hanako",90);
	User takeshi("takeshi",30);
	User jiro("jiro",100);

	cout<<"name:"<<taro.getname()<<" score:"<<taro.getscore()<<endl;
	cout<<"name:"<<hanako.getname()<<" score:"<<hanako.getscore()<<endl;
	cout<<"name:"<<takeshi.getname()<<" score:"<<takeshi.getscore()<<endl;
	cout<<"name:"<<jiro.getname()<<" score:"<<jiro.getscore()<<endl;

	return 0;
}

と変更すれば、人数は増えますが・・・

f:id:rkprog:20151024004809p:plain

ということで配列に変更することに。

その場合、set出来る関数があったほうが楽なので作成

void set(string st, int a)
	{
		name = st;
		score = a;
	}
int main()
{
	User user[4];
	user[0].set("taro",60);
	user[1].set("hanako",90);
	user[2].set("takeshi",40);
	user[3].set("jiro",100);

	for (int i = 0; i < ARRAY_LENGTH(user); i++)
	{
		cout<<"name:"<<user[i].getname()<<" score:"<<user[i].getscore()<<endl;
	}
	return 0;
}

これで

f:id:rkprog:20151024005454p:plain

いい感じですね。

今日はここまでで

ソースコード


#include<iostream>
#include<string>
#define ARRAY_LENGTH(array) (sizeof(array) / sizeof(array[0]))
using namespace std;

class User{
private:
	string name;
	int score;
	int rank;
public:
	User()
	{
		name = "none";
		score = 0;
	}

	User(string st)
	{
		name = st;
		score = 0;
	}

	User(string st,int a)
	{
		name = st;
		score = a;
	}

	void setscore(int a)
	{
		score = a;
	}

	void set(string st, int a)
	{
		name = st;
		score = a;
	}

	int getscore()
	{
		return score;
	}

	string getname()
	{
		return name;
	}
};

int main()
{
	User user[4];
	user[0].set("taro",60);
	user[1].set("hanako",90);
	user[2].set("takeshi",40);
	user[3].set("jiro",100);

	for (int i = 0; i < ARRAY_LENGTH(user); i++)
	{
		cout<<"name:"<<user[i].getname()<<" score:"<<user[i].getscore()<<endl;
	}
	return 0;
}