전역에서 쓰고싶은 함수가있는데 그 함수가 클래스에 밀접한 관계에 있고 해당 클래스 내부의 private멤버 변수에 그대로 접근하고싶을때! 정적 메소드를 사용할 수 있다.
class Color {
public:
Color() : r(0), g(0), b(0) {}
Color(float r, float g, float b): r(r), g(g), b(b) { }
float GetR() {return r;}
float GetG() {return g;}
float GetB() {return b;}
static Color MixColors(Color a, Color b) {
return Color((a.r + b.r) / 2, (a.g, b.g) / 2, (a.b + b/b) / 2);
}
private:
float r;
float g;
float b;
};
int main() {
Color blue(0,0,1);
Color red(1, 0, 0);
Color purple = Color::MixColors(blue, red);
}
Color purple = blue.MixColors(blue, red); 이런식으로 어떤 객체에 포함된식으로 쓸수도있음.
그냥 메소드랑 뭐가 다르냐? 그냥 메소드는 만들어진 "객체"가 수행하는일이잖아. 객체를 만들고 그 객체에 .을 찍고 뒤에 호출하는식인거지. 반면에 static메소드는 객체를 만들지 않아도 클래스를 통해 호출할수있는거구. 클래스::메소드 이렇게 호출해다가..
정적 멤버 변수
클래스에 속하는 변수! 객체가아닌..
객체들이 생성될때마다 1씩 증가하는 값을 가지도록하고싶어. 이런게 클래스에 속하는 변수로 지정하기 딱 좋은거임.
class Color {
public:
Color() : r(0), g(0), b(0), id(idCounter++) {}
Color(float r, float g, float b): r(r), g(g), b(b), id(idCounter++) { }
float GetR() {return r;}
float GetG() {return g;}
float GetB() {return b;}
static Color MixColors(Color a, Color b) {
return Color((a.r + b.r) / 2, (a.g, b.g) / 2, (a.b + b/b) / 2);
}
static int idCounter;
private:
float r;
float g;
float b;
int id;
};
int Color::idCounter = 1;
int main() {
Color blue(0,0,1);
Color red(1, 0, 0);
Color purple = Color::MixColors(blue, red);
}