c++의 정적 구성원

3922 단어 c + +정적 구성원
머리말
어떤 때 는 클래스 의 일부 구성원 이 클래스 자체 와 관련 되 어야 하 며,클래스 의 모든 대상 과 관련 되 는 것 이 아니다.예 를 들 어 클래스 의 모든 대상 이 공유 해 야 하 는 변 수 는 이 럴 때 우 리 는 클래스 의 정적 구성원 을 사용 해 야 한다.
성명 류 의 정적 구성원
정적 구성원 을 설명 하 는 방법 은 키 워드 를 사용 하 는 것 입 니 다.static멤버 는static일 수도 있 고public일 수도 있다.
예 를 들 어 은행 의 계좌 기록 을 나타 내 는 종 류 를 정의 한다.

class Account{
public:
    //            
    //    
    static double get_rate(){ return interestRate; }
    static void set_rate(double r){ interestRate = r; }
private:
    static double interestRate;//              
    //  static private  
    //   static        
};
Note:
  • 류 의 정적 구성원 은 그 어떠한 대상 에 도 존재 하고 대상 에는 정적 데이터 구성원 과 관련 된 데 이 터 를 포함 하지 않 습 니 다.
  • 정적 구성원 함 수 는 그 어떠한 대상 과 연결 되 지 않 고 정적 구성원 함수 에서 this 지침 을 사용 할 수 없습니다.정적 구성원 함 수 는 const 로 설명 할 수 없습니다.
  • 클래스 의 정적 구성원 사용 하기
    역할 영역 연산 자private를 사용 하여 정적 구성원 에 게 직접 접근 합 니 다.
    
    double r;
    r = Account::get_rate();
    정적 구성원 은 클래스 의 어떠한 대상 에 도 속 하지 않 지만 클래스 의 대상 을 통 해 정적 구성원 에 게 접근 할 수 있 습 니 다.
    
    Account ac1;
    Account *ac2 = &ac1;
    double r = ac1.get_rate();
    r = ac2->get_rate();
    구성원 함 수 는 정적 구성원 을 직접 사용 할 수 있 으 며,역할 영역 연산 자 를 필요 로 하지 않 습 니 다.
    정적 구성원 정의
    정적 구성원 함수 정의
    클래스 의 정적 구성원 함 수 는 클래스 의 외부 에서 도 정의 할 수 있 고 클래스 의 내부 에서 도 정의 할 수 있 습 니 다(정의 와 성명 의 차이 에 주의 하 십시오).
    클래스 의 외부 에서 정적 구성원 함 수 를 정의 할 때::키 워드 를 사용 할 수 없습니다.static키 워드 는 클래스 내부 의 정적 구성원 함수 성명 에서 만 사용 할 수 있 습 니 다.그렇지 않 으 면 반복 된다.
    클래스 의 외부 에서 정적 구성원 함 수 를 정의 할 때 이 함수 가 속 한 클래스 를 가리 켜 야 합 니 다.예 를 들 어:
    
    class Account{
    public:
        //            
        //      
        static double get_rate(){ return interestRate; }
        static void set_rate(double r){ interestRate = r; }
        static void print();//        
    private:
        static double interestRate;//              
        //  static private  
        //   static        
    };
    //            static   ,    。           。
    void Account::print(){
        //      
    }
    정적 데이터 구성원 정의
    정적 데이터 구성원 은 클래스 의 어떤 대상 에 도 속 하지 않 기 때문에 클래스 의 대상 을 만 들 때 정 의 된 것 이 아 닙 니 다.클래스 내부 에서 정적 데이터 구성원 을 초기 화 할 수 없습니다.클래스 의 외부 에서 모든 정적 데이터 구성원 을 정의 하고 초기 화 해 야 합 니 다.
    
    double Account::interestRate = initRate();//  static   
    
    정적 데이터 구성원 의 클래스 내 초기 화
    앞에서 언급 한 바 와 같이 클래스 의 정적 데이터 구성원 은 클래스 내부 에서 초기 화 되 어 서 는 안 된다.그러나 정적 데이터 구성원 이 동시에static유형 이 라면 클래스 에서 초기 화 할 수 있 습 니 다.
    상수 정적 구성원 이 클래스 내 에서 초기 화 되 더 라 도 클래스 의 외부 에서 이 구성원 을 정의 해 야 합 니 다.그러나 클래스 외 정 의 는 초기 값 을 지정 할 수 없습니다.클래스 내 에서 초기 값 이 제공 되 었 기 때 문 입 니 다.
    정적 데이터 구성원 의 특수 응용 장면
    1.정적 구성원 은 모든 대상 에 독립 되 어 있 기 때문에 정적 데이터 구성원 의 유형 은 그 가 속 한 유형 일 수 있 습 니 다.비 정적 데이터 구성원 은 그 가 속 한 클래스 의 지침 이나 참조 로 만 설명 할 수 있 습 니 다.
    예 를 들 면:
    
    class Person{
    public:
        //...
    private:
        static Person p; //  ,              
        Person *p1;     //  :               
        Person &p2      //  
        Person p3;      //  :           。
    };//    ,class Person  ,Person        ,            
    2.정적 구성원 을 기본 참조 로 사용 할 수 있 습 니 다.
    
    class Screen{
    public:
        Screen& clear(char = bkground);
    private:
        static const char bkground;
    }
    비 정적 데이터 구성원 은 기본 적 인 실제 인삼 으로 할 수 없습니다.비 정적 데이터 구성원 은 대상 에 속 하기 때문에 대상 의 값 은 실행 할 때 확정 되 지만 기본 매개 변 수 는 컴 파일 할 때 확 정 됩 니 다.즉,기본 매개 변수 가 확 정 될 때 실제 대상 이 만 들 어 지지 않 았 기 때문에 비 정적 데이터 구성원 을 기본 매개 변수 로 사용 할 수 없습니다.그렇지 않 으 면 오류 가 발생 합 니 다.
    설명:
    c++Basic 은'C++Primer 제5 판'에 대한 개인 적 인 정리 와 어 려 운 해석 입 니 다.
    더 깊이 알 고 싶다 면 정품 을 지원 하 세 요.
    여기 서 상투적인 c++의 정적 구성원 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 c++정적 구성원 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기