- 클래스에는 속하지만 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버를 의미한다.
- 멤버 변수가 정적으로 선언되면 멤버 변수가 정적 공간에 저장 되고 해당 클래스의 모든 객체에 대해 하나의 데이터만이 유지가 된다.
- 프로그램 실행중에 메모리 할당이 한번 되며 프로그램 종료 될때 메모리 해제된다.
class staticPerson{
private:
static int num;
public:
staticPerson();
static void print();
// 정적 멤버 함수는 정적 멤버 변수가 아닌 일반 변수는 접근이 안된다.
// 정적 멤버 함수는 암시적인 this가 없음 그러므로 const 사용 불가
};
#include "staticPerson.h"
#include <iostream>
int staticPerson::num = 0; // 초기화를 꼭 해줘야함.
staticPerson::staticPerson() {
num++;
}
void staticPerson::print() {
std::cout << num << std:: endl;
}
클래스의 멤버 함수도 정적으로 선언이 가능하며 해당 클래스의 객체를 생성하지 않고 클래스 이름만으로 함수 호출이 가능하다.
1. 객체이름.멤버함수이름(); // 일반 멤버 함수의 호출
2. 클래스이름.멤버함수이름(); // 정적 멤버 함수의 호출
#include <iostream>
#include "staticPerson.h"
using namespace std;
int main() {
staticPerson p0;
staticPerson p1;
p0.print();
p1.print();
staticPerson::print(); // print 함수를 정적 멤버로 선언하여 가능해짐
}
2
2
2