-
https://www.youtube.com/watch?v=ZoK_VFoycas&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=64
1. static을 통해 객체 생성에 번호 부여
#include <iostream> using namespace std; int idCounter = 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); } int getId() { return id; } private: float r; float g; float b; int id; }; int main() { Color blue(0, 0, 1); Color red(1, 0, 0); Color mix = Color::MixColors(blue, red); cout << "mixR : " << mix.GetR() << endl << "mixG : " << mix.GetG() << endl << "mixB : " << mix.GetB() << endl; cout << "blue의 Id : " << blue.getId() << endl; cout << "red의 Id : " << red.getId() << endl; cout << "mix의 Id : " << mix.getId() << endl; }
위의 코드에서 idCounter를 전역변수로 지정하여서 id를 부여해줬다. 그러나 idCounter는 Color클래스와 밀접한 관련을 가지고 있기 때문에 Color클래스 안에 넣어주고 싶다.
#include <iostream> using namespace std; 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); } int getId() { return id; } 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 mix = Color::MixColors(blue, red); cout << "mixR : " << mix.GetR() << endl << "mixG : " << mix.GetG() << endl << "mixB : " << mix.GetB() << endl; cout << "blue의 Id : " << blue.getId() << endl; cout << "red의 Id : " << red.getId() << endl; cout << "mix의 Id : " << mix.getId() << endl; }
따라서 idCounter를 클래스안에 집어넣고 static을 통해서 넣어주면 된다.
static int idCounter = 1;
그리고 위와 같이 초기화를 시켜주면 구문오류가 발생한다.
왜냐하면 idCounter는 정적멤버인데 객체가 생성 될 때 idCounter가 만들어지는 것은 이상하다.
객체가 생성될 때마다 idCounter가 초기화되어버리면 논리적으로 이상하기 때문에 클래스 외부에 선언을 해준다.
int Color::idCounter = 1;
클래수 외부에서 이러한 방법을 통해서 초기화를 시켜주면 된다.
'C++' 카테고리의 다른 글
멤버 메서드 활용하기 (0) 2021.12.23 상수형 매개변수와 상수형 메서드 (0) 2021.12.23 정적 멤버 (1) (0) 2021.12.23 생성자의 다양한 사용 방법 (0) 2021.12.23 객체의 생성과 소멸 (0) 2021.12.21