2009-07-19 7 views
3

방금 ​​다음 생성자 소스 코드를 발견했습니다. 나의 이해에 따라 다음과 같이C++ 초급 질문 : 생성자

testProg::testProg() : CCProg() 
{ 
m_UID = n_UID = 0; 
} 

일반적으로는, 생성자 보이는 누군가 빨리 말해 수 있다면

testProg::testProg()  
{  
m_UID = n_UID = 0;  
}  

그래서 나는이 CCProg()의 목적이 무엇인지 궁금, 좋은 것 여기서 무슨 일이 일어나고 있는지. 감사!

답변

16

testProg가 CCProg에서 상속되고 CCProg에 대한 인수가없는 생성자가 testProg 생성자의 initialization list에서 호출되는 것 같습니다.

호출되는 no-args 생성자이므로 명시 적 호출은 실제로 필요하지 않습니다 (어쨌든 함축이라고도 함). 따라서이 구문의 주요 용도는 인수를 취하는 상위 생성자를 호출하는 것입니다. 예를 들어

는 : 명시 적 호출이 탈락 된 경우이 장치를 사용할 수 있다면

여기
testProg::testProg(int days) : CCProg(days) 
{ 
m_UID = n_UID = 0; 
} 

, 노 인수 생성자는 달리 컴파일이 실패, implicity 호출 할 것이다.

CCProg가 testProg에 속한 멤버 변수의 이름이 될 수도 있습니다 (다시 말하면, no-args 생성자에 대한 명시 적 호출은 함축적이라고 함). .

+2

수정. OP의 이익을 위해, 이들은 C++ 언어에서 "생성자 초기화리스트"라고 불립니다. – oggy

6

그것은 하나의 기본 클래스 생성자를 명시 적으로 호출은 클래스가이처럼 보이는 경우 : 클래스는 다음과 같습니다 경우, 멤버 변수를 초기화하는

class testProg : public CCProg 

또는 (덜) 전화 :

class testProg 
{ 
    Something CCProg; 
    // ... 
+0

+1 두 가능성 모두를 언급합니다. – MSalters

4

어느 :

  • 클래스 TestProg가 클래스 CCProg로부터 유도되고 또는
  • 클래스 TestProg가는 CCProg의 생성자를 명시 적으로 호출이다 두 경우 모두 CCProg

라는 이름의 내장 개체가하고 있기 때문에 허용되는 전화를하지만, 꼭 필요한 것은 매개 변수가없는 생성자입니다 . CCProg가있는 int 매개 변수가있는 생성자가 있다면

그러나, 당신이

testProg::testProg() : CCProg(1) { } 

처럼 뭔가를 호출해야이 구문은 생성자를 선택 (경우에 CCProg이 1 개 이상을 가지고)과 수 값을 전달하십시오. 또한 어떤 일이 일어나는 순서에주의하십시오 : testprog ctor 본문이 입력되기 전에 CCProg가 생성됩니다.

0

이 코드의 기능은 명시 적으로 CCProg() 클래스의 생성자를 호출하는 것입니다.

상속 아키텍처에서는 기본 클래스의 생성자를 다시 작성하는 노력을 절약하기 위해이 기술을 사용할 수 있습니다.