static の使い方
書く場所
- グローバル変数の位置
{}に囲まれていないところ
static int anpan;//そのファイル内でのみ有効
extern int anpan;//extern別のファイルで参照する場合extern同じ変数宣言(そとにあるよ)
[extern](https://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html)
enemy.h
#ifdef ENEMY
int anpan;
#else
extern int anpan
#endif
staticはファイルごとに別の関数扱い
関数内のstatic
static領域で変数確報、関数終わったときずっとstatic領域内残り続ける
クラス内で書いた場合
class Mosnter
{
public:
int HP;//インスタンスごとにとられる
static int kazu;//クラスについて一個だけスタティック領域にとられる
}
kadai
#include<iostream>
using namespace std;
class Monster
{
public:
int HP;
static int kazu;
Monster()
{
kazu++;
}
~Monster()
{
kazu--;
}
};
int Monster::kazu = 0;
int main()
{
Monster anpanman;
cout << anpanman.kazu << endl;
Monster nakagomi;
cout << nakagomi.kazu << endl;
cin.get();
return 0;
}
クラス内の関数につける
インスタンスなくても呼べる
Soundよく使われてる
static関数内で扱えるのはstaticつけたのみ(static関数やstatic変数)
Getter/Setterの話
//Setter
class Monster
{
int hp;
public:
void SetHP(int n)
{
hp=n;
}
}
//Getter
int GetHP()
{
return hp;
}
int main()
{
Monster Gomi;
Gomi.SetHP(10);
}
void Hp(int n)
{
hp=n;
}
int Hp()
{
return hp;
}
作为程序员会有很吵的前辈和全都public就行的前辈(
関門