2010-04-14 4 views
3

저는 C/C++에 매우 익숙하며 메소드가 무엇인지 불확실합니다. 그러나 그 이유는 내가 여기서 대답을 찾으려고 노력하고 있기 때문입니다. 내가 당신에게 예 valueOne 및 valueTwo은 신체의 외부 값을 할당 클래스 속성입니다속성을 생성자 옆에 선언했습니다.

MyClass::MyClass() : valueOne(1), valueTwo(2) 
{ 
     //code 
} 

을 보여 주자, 어떤 방법이 호출되고 왜 이런 식으로 이루어집니다. 왜 이런 식으로하지 마십시오

MyClass::MyClass() 
{ 
     valueOne = 1; 
     valueTwo = 2 
     //code 
} 

누구든지 나를 도와 줄 수 있다면 좋을 것입니다.

답변

7

이것은 initializer list입니다. 생성자 다음에 이니셜 라이저 목록을 사용하여 멤버 변수를 초기화 할 수 있습니다.

기본적으로 생성자는 기본 생성자를 호출하여 멤버 변수 인 개체를 자동으로 만듭니다. 이니셜 라이저 목록을 사용하여 다른 생성자를 사용하도록 지정할 수 있습니다. 때로는 멤버 변수에 인수가없는 생성자가없는 경우 이니셜 라이저 목록을 사용해야합니다.

1

이것을 initialization list이라고합니다. 주로 성능 (큰 오브젝트 포함) 또는 일관성 (내장 유형이 int)을 위해 수행됩니다.

1

초기화 프로그램 목록에서 구성원을 초기화하는 것이 좋습니다. 귀하의 경우에는 상관 없지만 두 번째 코드 조각에서 수행 한 방식으로 int &을 초기화 할 수는 없습니다. 이 클래스는 기본 클래스 생성자에 인수를 전달할 수있는 유일한 장소이기도합니다.

2

일반적으로 효율성 및 성능상의 이유로 초기화 목록 (이전 스타일)이 선호됩니다. 개인적으로 나는 그것들을 생성자 자체의 복잡한 로직으로부터 간단한 초기화를 분리하기 때문에 코드 가독성의 이유로도 선호한다.

0

포인터는 BASE 클래스의 데이터 필드 나 멤버 함수를 참조하는 데 사용되는 경우 이니셜 라이저 목록에서 액세스 할 수 있습니다.