今日やったところ

class

クラス=変数+関数 ⇒何か対象物を表します

車class, ゲームキャラclass, 人class, 猫class…

class
アクセス権 ⇒ private(非公開), public(公開)
 メンバ変数
 メンバ関数

class 名前
{
	int a,b,c; //private扱い
public:
    こっから下はパブリック
private:
    こっから下はプライベート
public:
    こっから。。。
};
 
structはデフォルトがpublic
struct 名前
{
	int a,b,c; //pubic扱い
private:
    こっから下はプライベート
public:
    こっから。。。
};

コンストラクタ(constructor)、デストラクタ(destructor)

コンストラクタ
classと同じ名前で、戻り値のない特殊な関数(引数はあるよ)
classのメンバ変数の初期化を行うための関数
classのインスタンスが生成されるときに呼ばれます
コンストラクタにメンバイニシャライザを書いてメンバ変数を初期化することもできるよ
デストラクタ
classと同じ名前の初めに~を付けた名前で、引数・戻り値のない特殊な関数  : classのメンバ変数の初期化を行うための関数  : classのインスタンスが生成されるときに呼ばれます
コンストラクタはオブジェクトができるとき
class abc;が既に定義済みの時
{
abc myinstance; //abcクラスのインスタンスmyinstance
                //メモリが確保されると同時にコンストラクタが呼ばれる
//ごにょごにょ
} //このブロックでabcは破棄されるので、ここでデストラクタが呼ばれる

コンストラクタ、デストラクタの呼ばれる順番

#include <iostream>
using namespace std;
 
class foo
{
	int x,y;
public:
	//コンストラクタ
	foo():x(0),y(0) 
    {
		print();
		cout << "コンストラクタだよ" << endl;
		} //インライン定義
	foo(int _x, int _y):x(_x),y(_y) 
    {
		print();
		cout << "コンストラクタだよ" << endl;
	} //インライン定義
	//オーバーロード関数
 
	//デストラクタ
	~foo()
	{
		print();
		cout << "さよならfoo" << endl;
	}
	void print()
	{cout <<"(" << x <<", " << y <<")" <<endl;}
};
 
int main() {
	foo a; //でふぁおるとのコンストラクタで(0,0)に初期化される
	{
		a.print();
		foo b(1, 1);
	}
	//b.print(); ブロック外ではアクセスできない
}
(0, 0)
コンストラクタだよ
(0, 0)
(1, 1)
コンストラクタだよ
(1, 1)
さよならfoo
(0, 0)
さよならfoo