C++ クラスの復習。オブジェクト指向っぽく
クラスの復習
今回は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; }
実行結果
こんな感じです。名前のみの場合
と点数が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; }
と変更すれば、人数は増えますが・・・
ということで配列に変更することに。
その場合、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; }
これで
いい感じですね。
今日はここまでで
#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; }