회원 로그인
|
Static(정적) 멤버 변수, 메소드
C++ Static(정적) 멤버 변수, 메소드
Static
- 앱이 실행될 때 메모리 확보, 앱이 종료할 때 해제
[Static(정적) 멤버 변수]
- Static 멤버 변수는 현재 클래스로 생성된 모든 객체들이 공유한다. (공유 : 같은 메모리를 참조함)
- Static 멤버 변수는 클래스 밖에서 별도로 초기화 해야함
[Static 멤버 메소드]
- private, protected로 선언된 정적 멤버 변수를 접근하는게 일반적인 용도이다.
- Static 멤버 메소드는 클래스를 객체로 생성하지 않고 사용할 수 있다.
[특이사항]
- 메소드 안에서는 this키워드를 사용할 수 없다.
- 오버라이딩을 지원하지 않는다.
[문법]
class 클래스명 {
private:
static 자료형 멤버변수;
public:
static 반환형 멤버메소드() {
static 멤버변수 참조
}
};
자료형 클래스명::멤버변수 = 초기화값;
클래스명::정적멤버메소드(); // 호출
Static
- 앱이 실행될 때 메모리 확보, 앱이 종료할 때 해제
[Static(정적) 멤버 변수]
- Static 멤버 변수는 현재 클래스로 생성된 모든 객체들이 공유한다. (공유 : 같은 메모리를 참조함)
- Static 멤버 변수는 클래스 밖에서 별도로 초기화 해야함
[Static 멤버 메소드]
- private, protected로 선언된 정적 멤버 변수를 접근하는게 일반적인 용도이다.
- Static 멤버 메소드는 클래스를 객체로 생성하지 않고 사용할 수 있다.
[특이사항]
- 메소드 안에서는 this키워드를 사용할 수 없다.
- 오버라이딩을 지원하지 않는다.
[문법]
class 클래스명 {
private:
static 자료형 멤버변수;
public:
static 반환형 멤버메소드() {
static 멤버변수 참조
}
};
자료형 클래스명::멤버변수 = 초기화값;
클래스명::정적멤버메소드(); // 호출
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; class Ogre { protected: int _count = 0; static int count; // 스택틱 변수, Ogre 전체에서 사용할 수 있는 독립된 변수 public: // 생성자 Ogre() { // 클래스명::스태틱메소드() - 공동 소유의 메소드 cout << "오우거가 생성 [ _count : " << this->_CountUp() << ", count : " << Ogre::StaticCountUp() << endl; } // 일반 메소드 // 생성된 자기 객체에서선 ++ int _CountUp() { return ++_count; } // 일반 메소드 void PrintCount() { cout << "[Member] 현재 오우거의 수는 " << _count << " 이다." << endl; } // 스태틱 메소드, Ogre::count 객체 생성하지 않아도 호출 // protected에서 정의된 스택틱 변수는 public에서 static 함수로 접근한다. static int StaticCountUp() { return ++Ogre::count; } // 스태틱 메소드 static void StaticPrintCount() { cout << "[Static] 현재 오우거의 수는 " << Ogre::count << " 이다." << endl; } }; // 스태틱 초기화 int Ogre::count = 0; class StaticTest { public: StaticTest() { Start(); } void Start() { // 스태틱 메소드는 객체 생성과 상관 없이 호출할 수 있음 Ogre::StaticPrintCount(); // 메소드는 객체 생성 없이는 호출할 수 없음 // Ogre::PrintCount(); // 일반 메소드 호출은 아래처럼 사용해야함 // Ogre::Ogre(); // 생성자로 참조? 임시적으로 사용했다 사라지는? Ogre* ogres1 = new Ogre(); Ogre* ogres2 = new Ogre(); Ogre* ogres3 = new Ogre(); Ogre* ogres4 = new Ogre(); Ogre* ogres5 = new Ogre(); Ogre* ogres6 = new Ogre(); ogres6->PrintCount(); // Ogre::StaticPrintCount(); } }; void main() { StaticTest* object = new StaticTest(); delete object; }
댓글 0개
| 엮인글 0개
285개(7/15페이지)
번호 | 제목 | 글쓴이 | 조회 | 날짜 |
---|---|---|---|---|
165 | [C#] 네임스페이스 (namespace) | 푸딩뱃살 | 3405 | 2015.11.14 17:34 |
164 | [C#] 인터페이스 (Interface) | 푸딩뱃살 | 2196 | 2015.11.13 18:17 |
>> | [C/C++] Static(정적) 멤버 변수, 메소드 | 푸딩뱃살 | 2474 | 2015.11.13 10:32 |
162 | [C/C++] 추상 클래스 - 오버라이드 / 업/다운캐스팅(형변환) / virtual(가상함수) | 푸딩뱃살 | 4726 | 2015.11.12 02:00 |
161 | [C/C++] 메소드 오버라이드 | 푸딩뱃살 | 1993 | 2015.11.12 01:51 |
160 | [C#] 상속 (with Unity) | 푸딩뱃살 | 5454 | 2015.11.10 16:25 |
159 | [C/C++] 클래스 상속 | 푸딩뱃살 | 2245 | 2015.11.10 14:08 |
158 | [C/C++] 객체 활용 | 푸딩뱃살 | 2471 | 2015.11.09 21:28 |
157 | [C#] C# 객체 클래스 | 푸딩뱃살 | 3568 | 2015.11.08 15:51 |
156 | [C/C++] 생성자 / 소멸자 / 오버로드 | 푸딩뱃살 | 2202 | 2015.11.07 01:23 |
155 | [C/C++] 클래스 선언/정의, 객체 생성 | 푸딩뱃살 | 3567 | 2015.11.06 14:05 |
154 | [C/C++] 로또 프로그램 | 푸딩뱃살 | 2284 | 2015.11.06 12:00 |
153 | [C/C++] 2차원 동적 객체 배열 활용 | 푸딩뱃살 | 3650 | 2015.11.06 00:47 |
152 | [C/C++] 2차원 배열 | 푸딩뱃살 | 2403 | 2015.11.06 00:30 |
151 | [C/C++] 2차원 포인터 | 푸딩뱃살 | 2052 | 2015.11.06 00:26 |
150 | [C/C++] 동적할당 | 푸딩뱃살 | 1805 | 2015.11.05 11:23 |
149 | [C/C++] 당신의 프로그래밍에 디버깅 더하기 : Visual C++ 디버깅 기초에서 고급까지 | 푸딩뱃살 | 1452 | 2015.11.05 11:20 |
148 | [C/C++] 포인터와 배열의 이해 | 푸딩뱃살 | 2013 | 2015.11.04 23:54 |
147 | [C/C++] 포인터 | 푸딩뱃살 | 2192 | 2015.11.04 15:14 |
146 | [C/C++] 일반 함수와 메소드간의 차이 | 푸딩뱃살 | 2431 | 2015.11.03 23:38 |