회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


Static(정적) 멤버 변수, 메소드

푸딩뱃살 | 2015.11.13 10:32 | 조회 2473
C++ 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;
}
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