Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DBMS
- 니가 참 좋아
- Inside Of Me
- 개발자
- 봄 사랑 벚꽃 말고
- 데이터베이스
- 신입
- index
- 천공의 시간
- 아이유
- 슬픔의 후에
- I'm fine thank you
- nginx
- 핑거스타일
- DBMS 구성요소
- 6학년 8반 1분단
- 오라클 아키텍처
- 스위트라떼
- db
- 러블리즈
- 레이디스코드
- IT
- 기타
- oracle
- 장범준
- 악보
- 말 더듬
- 오라클
- SQL 처리
- 인덱스
Archives
취미로 음악을 하는 개발자
[C++] Static 멤버 본문
728x90
우리는 보통 클래스를 만들 때 private 변수와 public 변수를 만든다.
private은 필드값, public은 private 값에 직접적으로 접근하는 것을 방지하기 위한 용도로 사용하곤 한다.
Color MixColors(Color a, Color b)
{
return Color((a.GetR() + b.GetR()) / 2, (a.GetG() + b.GetG()) / 2, (a.GetB() + b.GetB()) / 2);
}
이런식으로 클래스 밖에 함수를 만들고 각 클래스 변수의 필드값을 함수로 호출해서 연산할 수 있다.
정적으로 함수를 바꾸면 좀 더 간단하게 사용할 수 있다.
static Color MixColors(Color a, Color b) {
return Color((a.r + b.r) / 2, (a.g, b.g) / 2, (a.b + b.b) / 2);
}
위 함수는 Color 클래스 안에 선언된 상태이다.
클래스 밖에서 선언된 함수처럼 get함수를 통해 호출하지만 static 함수는 클래스 내에 선언되었기 때문에
직접적으로 필드에 접근할 수 있게 된다.
static 변수는 선언할 수 있지만 class 안에서 초기화시킬 수는 없다.
변수도 마찬가지로 static으로 선언하면 다른 클래스에서의 변수 이름 중복을 방지할 수 있다.
또한 C++에서는 전역변수 사용을 지양하기 때문에 static으로 선언해서 사용하는 것이 좋다.
//static 변수는 초기화를 할 수 없다.
//static int idCounter = 1; (x)
static int idCounter;
// class 밖에서 초기화시켜준다.
int Color::idCounter = 1;
// 정적 멤버
#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; }
int GetId() {return id; }
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 변수는 초기화를 할 수 없다.
//static int idCounter = 1; (x)
static int idCounter;
private:
float r;
float g;
float b;
int id;
};
// class 밖에서 초기화시켜준다.
int Color::idCounter = 1;
int main()
{
Color blue(0, 0, 1);
Color red(1, 0, 0);
Color purple = Color::MixColors(blue, red);
cout << "r = " << purple.GetR() << ", g = " << purple.GetG() << ", b = " << purple.GetB() << endl;
cout << "red.GetId() = " << red.GetId() << endl;
cout << "purple.getId() = " << purple.GetId() << endl;
}
'공대인 > C[++]' 카테고리의 다른 글
[C++] 인라인(inline) 함수 (0) | 2019.05.12 |
---|---|
[C++] 초기화 목록, 생성자 위임 (0) | 2019.05.05 |
[C++] 객체 생성과 소멸 (0) | 2019.05.05 |
[C++] 클래스 (0) | 2019.04.23 |
[C++] Namespace (0) | 2019.04.12 |
Comments