C+중 정적 구성원 함수 와 비 정적 구성원 함수 의 차이

정적 구성원 함수 와 비 정적 구성원 함수 의 차이
데이터 멤버:
정적 데이터 구성원 은 클래스 의 일부분 으로 클래스 의 모든 인 스 턴 스 공유(정적 구역)입 니 다.비 정적 데이터 구성원,클래스 의 모든 인 스 턴 스 는 복사(동적 구역)가 있 습 니 다.
정적 데이터 구성원 의 접근:
정적 데이터 구성원 은 클래스 의 일부분 으로 모든 인 스 턴 스 가 발생 하기 전에 이미 존재 합 니 다.클래스 이름:정적 구성원 변수 이름 으로 접근 합 니 다.
함수 구성원(모두 코드 영역 에 있 음):
정적 함수 구성원 과 비 정적 함수 구성원 은 모두 클래스 소유 이 며 대상 은 함수 복사 가 존재 하지 않 습 니 다.정적 구성원 함수 와 비 정적 구성원 함수 의 근본 적 인 차 이 는 비 정적 함수 가 대상 이름 이나 대상 포인터->호출 되 고 호출 할 때 컴 파일 러 는 함수 에 this 지침 을 전달 합 니 다.정적 구성원 함 수 는 클래스 이름 이 있 습 니 다.:또는 대상 이름 입 니 다.호출,컴 파일 러 는 함수 에 this 지침 을 전달 하지 않 고 대상 개 체 를 식별 하지 않 으 며 작업 류 의 정적 데이터 구성원 을 자주 사용 합 니 다.방문 류 의 비정 상 구성원 은 대상 을 통 해 이 루어 질 수 있 습 니 다.
메모리 각도 분석:
클래스 의 정적 구성원(데이터 구성원 과 함수 구성원)은 클래스 자체 의 소유 로 클래스 를 불 러 올 때 메모 리 를 분배 하고 클래스 이름 을 통 해 직접 접근 할 수 있 습 니 다.비정 상 구성원(데이터 구성원 과 함수 구성원)은 클래스 의 인 스 턴 스 소유 이기 때문에 클래스 의 인 스 턴 스 를 만 들 때 만 메모 리 를 할당 하고 인 스 턴 스 를 통 해 접근 할 수 있 습 니 다.
메모:클래스 의 정적 데이터 구성원 은 정적 저장 소 입 니 다.정적 생존 주기 이 므 로 초기 화 해 야 합 니 다.
메모:정적 데이터 구성원 의 초기 화 는 클래스 체 외 에서 진행 되 며,앞 에 static 를 추가 하지 않 아 일반 정적 변수 나 대상 과 헷 갈 리 지 않도록 합 니 다.
정적 구성원 함수 접근 비정 상 구성원 오류:
클래스 의 정적 구성원 은 클래스 를 불 러 올 때 이미 메모 리 를 분 배 했 습 니 다.이때 클래스 의 비 정적 구성원 은 메모 리 를 분배 하지 않 았 습 니 다.메모리 에 존재 하지 않 는 것 에 접근 하 는 것 은 자 연 스 럽 게 오류 가 발생 할 수 있 습 니 다.
예:

#include 
using namespace std; 
 
class Test 
{ 
  public: 
    Test(int a){ A = a; ++B;} 
    static void smf(Test tt); 
  private: 
    int A; 
    static int B; 
}; 
 
void Test::smf(Test tt) 
{ 
  cout << "tt.A : " << tt.A << endl;  //                    
  cout << "Test::B : " << Test::B << endl; 
  cout << "tt.B : " << tt.B << endl; 
} 
 
int Test::B = 0; //            <    ><  >::<       >=< > 
 
int main() 
{ 
  Test t1(100); 
  Test t2(200); 
  Test::smf(t1); 
  Test::smf(t2);//               
 
  system("pause"); 
  return 0; 
}

읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기