C++ 구성원 초기화 목록

2741 단어
- 구조 함수를 호출할 때 대상은 괄호 안에 있는 코드가 실행되기 전에 생성되기 때문에 괄호 안에 대상의 상수 구성원을 초기화할 수 없습니다.
Queue::Queue(int qs)
{
    front = rear = NULL;
    items = 0;
    qsize =qs;    // not acceptable! qsize 
}

따라서 C++는 상술한 작업을 완성하기 위한 특수한 문법을 제공했다. 구성원 초기화 목록

그것은 어떤 모양입니까?

  • 는 쉼표로 구분된 초기화 목록으로 구성되어 있다(전면에 사칭이 있다).
  • 는 매개 변수 목록의 오른쪽 괄호 다음에 함수체의 왼쪽 괄호 앞에 있습니다.
  • 데이터 구성원의 이름이 mdata이고 val로 초기화해야 한다면 초기화기는 mdata(val)입니다.
    1 Queue::Queue(int qs) : qsize(qs), items(0) // initialize qsize to qs, 0 to items
    2 {
    3     front = rear = NULL;
    4 } 

    초기값은 상수나 구조 함수의 매개 변수 목록에 있는 매개 변수일 수 있으며 초기화는 상수에만 한정되지 않습니다
  • 사용 시기:

  • 구조 함수만 일종의 초기화 목록 문법을 사용할 수 있으며, 구성원 초기화 목록을 구조 함수 이외의 다른 클래스에 사용할 수 없음
  • 자체가 클래스 대상인 멤버에게구성원을 사용하여 목록을 초기화하는 효율이 더욱 높다(복제구조함수나 변환함수를 직접 호출하여 [기본구조함수를 호출하고 부치연산자를 사용하여 목표 대상에게 부치기] 또는 [부치연산자를 재정의하지 않았을 때: 기본구조함수를 호출하고 변환함수로 임시 대상을 구성하며 마지막으로 임시 대상을 목표 대상에게 부치기][대입 연산자를 재정의한 후: 기본 구조 함수를 호출하고 정의된 대입 연산자를 사용하여 목표 대상에게 대입하는 단계)
  • 비정적const 구성원은 반드시 이런 문법을 사용해야 한다(C++11 이전)
  • 인용으로 성명된 클래스 구성원은 반드시 이런 문법을 사용해야 한다
  • 특징

  • 데이터 구성원이 초기화된 순서는 클래스 성명에 나타난 순서와 같고 초기화기의 배열 순서와 무관하다
  • 구성원 초기화 목록에 사용되는 괄호 방식도 일반 초기화에 사용 가능
  • int games = 162;
    double talk = 2.17828;

    다음으로 바꾸기
    int games(162);
    double talk(2.17828);



  • C++11:


    - C++11을 사용하면 보다 직관적인 방식으로 초기화할 수 있습니다(비정상적 const 구성원, 비정상적 구성원).
    class Classy
    {
        int mem1 = 10;    // in-class initialization
        const int mem2 = 20;    // in-class initialization
        ...
    };
    

    구성원 초기화 목록을 사용하는 구조 함수를 호출하면 실제 목록은 기본 초기값을 덮어씁니다
     
     

    좋은 웹페이지 즐겨찾기