728x90
반응형
색깔을 저장하는 클래스를 만들어볼 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include <iostream>
#include<algorithm>
using namespace std;
class Color {
public:
Color() {
r = 0;
g = 0;
b = 0;
}
Color(float r, float g, float b) {
this->r = r;
this->g = g;
this->b = b;
}
float GetR() { return r; }
float GetG() { return g; }
float GetB() { return b; }
private:
float r;
float g;
float b;
};
Color MixColors(Color a, Color b) {
Color res=Color(a.GetR() + b.GetR() / 2, a.GetG() + b.GetG() / 2, a.GetB() + b.GetB() / 2); //res객체 생성
return res;
}
int main() {
Color blue=Color(0, 0, 1);
Color red=Color(1, 0, 0);
Color purple = MixColors(blue, red);
cout << purple.GetR() << "," << purple.GetG() << "," << purple.GetB() << endl;
}
|
cs |
이 MixColors 함수를 클래스 안으로 넣어주면 에러메세지가 뜬다.
왜냐면 소속되는 객체를 밝혀주지 않았기 때문이다.
그래서 Color purple=purple.MixColors(blue,red); 를 써주는 방법이 있긴 한데 굉장히 어색한 표현이 아닐 수 없다.
정적메서드는 호출할 수 있는 방법은 네임스페이스처럼
:: 을 넣어주면 된다!
근데 왜 정적메서드를 써야 할까?
MixColors에서 GetR()같이 get함수를 써야하는데 정적메서드를 쓰면 굳이 그러지 않아도 된다.
이처럼 전역으로 선언된 것을 class 안으로 집어넣고 싶을 때 사용하는 것이 static이다!
클래스 안에서 idCounter는 선언만 가능하다. 여기에 값을 대입하기 위해서는 밖에서
값을 대입할 수 있고 네임스페이스 처럼 int Color::idCounter=1 이런식으로 쓸 수 있다. 네임스페이스에서 선언과 정리를 분리한 것을 생각해보면 된다.
728x90
반응형
'C++ > 기초(두들낙서)' 카테고리의 다른 글
[C++] 멤버 메서드 활용하기 (0) | 2022.07.02 |
---|---|
[C++] 공용체와 열거체 / 포인터 (0) | 2022.07.01 |
[C++] 객체의 생성과 소멸 (0) | 2022.07.01 |
[C++] auto/ 공백포함해서 입력받는 방법 / string / 구조체 (0) | 2022.06.25 |
[C++] 네임스페이스, 클래스와 구조체,this 포인터 (0) | 2022.06.25 |
댓글