static
- 변수와 함수에 대한 기억 부류의 한 종류
- 생명주기 – 프로그램이시작될때생성,프로그램종료시소멸
- 사용범위 – 선언된범위,접근지정에따름
클래스의 멤버
- static 멤버
- 프로그램이 시작할 때 생성
- 클래스 당 하나만 생성, 클래스 멤버라고 불림
- 클래스의 모든 인스턴스(객체)들이 공유하는 멤버
- non-static 멤버
- 객체가생성될때함께생성
- 객체마다 객체 내에 생성
- 인스턴스 멤버라고 불림
멤버의 static 선언

static 멤버 변수 생성
- 전역 변수로 생성
- 전체프로그램내에한번만생성
- static 멤버 변수에 대한 외부 선언이 없으면 다음 링크 오류
- 객체의 멤버로 접근
static 멤버는 객체 이름이나 객체 포인터로 접근 -> 보통 멤버처럼 접근 할 수 있음
객체.static멤버
객체포인터->static멤버
Person 타입의 객체 lee와 포인터 p를 이용하여 static 멤버를 접근하는 예
객체.static멤버 객체포인터->static멤버
Person lee;
lee.sharedMoney = 500; // 객체.static멤버 방식
Person *p;
p = &lee;
p->addShared(200); // 객체포인터->static멤버 방식
- 클래스명과 범위 지정 연산자 :: 로 접근
클래스 이름과 범위 지정 연산자(::)로 접근 가능
-> static 멤버는 클래스마다 오직 한 개만 생성되기 때문
클래스명::static멤버
han.sharedMoney = 200; <-> Person::sharedMoney = 200;
lee.addShared(200); <-> Person::addShared(200);
- non-static 멤버는 클래스 이름으로 접근 불가
Person::money = 100; // 컴파일 오류. non-static 멤버는 클래스 명으로 접근불가
non-static 멤버는 클래스 명으로 접근불가 Person::addMoney(200);// 컴파일 오류. non-static 멤버는 클래스 명으로 접근불가
static 멤버와 non-static 멤버 비교
static의 주요 활용
- 전역 변수나 전역 함수를 클래스에 캡슐화
- 전역 변수나 전역 함수를 가능한 사용하지 않도록
- 전역 변수나 전역 함수를 static으로 선언하여 클래스 멤버로 선언 - 객체 사이에 공유 변수를 만들고자 할 때
- static 멤버를 선언하여 모든 객체들이 공유
예) static 멤버를 가진 Math 클래스
#include <iostream> using namespace std;
class Math { public:
static int abs(int a) { return a>0?a:-a; }
static int max(int a, int b) { return (a>b)?a:b; }
static int min(int a, int b) { return (a>b)?b:a; }
};
int main() {
cout << Math::abs(-5) << endl;
cout << Math::max(10, 8) << endl;
cout << Math::min(-3, -8) << endl;
}
'개발 > C++' 카테고리의 다른 글
[C++] 제네릭 (0) | 2022.12.04 |
---|---|
[C++] 상속 (0) | 2022.11.27 |
[C++] 함수 중복 | 디폴트 매개변수 (feat. 복사 생성자) (0) | 2022.11.13 |
[C++] 객체 치환 / 참조에 의한 호출 / 벡터 (0) | 2022.11.04 |
[C++ 10.18 7주차 수업] (0) | 2022.10.18 |