2009-09-17 2 views

답변

53

.H :

class Foo { 
    int x, y; 
    Foo(int a, int b=0); 
}; 

.CC : 당신은 선언하지 구현에 기본값을 추가

#include "foo.h" 

Foo::Foo(int a,int b) 
    : x(a), y(b) { } 

.

+0

감사합니다. 빠른 응답에 감사드립니다. – royvandewater

8

헤더 파일에 기본 매개 변수가 있어야하며 cpp는 없어야합니다.

test.h :

class Test 
{ 
public: 
    Test(int a, int b = 0); 
    int m_a, m_b; 
} 

Test.cpp에 :

Test::Test(int a, int b) 
    : m_a(a), m_b(b) 
{ 

} 

MAIN.CPP :

#include "test.h" 

int main(int argc, char**argv) 
{ 
    Test t1(3, 0); 
    Test t2(3); 
    //....t1 and t2 are the same.... 

    return 0; 
} 
5

당신은 기본 인수를 둘 필요가 .cpp 파일이 아니라 헤더의.

8

기본 매개 변수는 헤더 파일에 작성해야합니다.

Foo(int a, int b = 0); 

cpp에서 메소드를 정의하는 동안 기본 매개 변수를 지정할 수 없습니다. 그러나 나는 기억하기 쉽도록 주석 된 코드의 기본값을 유지합니다.

Foo::Foo(int a, int b /* = 0 */) 
+2

필요에 따라 두 곳에서 변경 하시겠습니까? ;-) –

+1

시간의 99 %는 변하지 않을 것입니다. 그래서 당신은 희귀 한 유즈 케이스에 대해 이야기하고 있습니다 :-) – Naveen

+1

제 의견으로는 C++ 표준은 두 곳 모두에 있고 그것이 동일하다는 것을 확인하기에는 너무 나쁘지 않습니다. 매개 변수의 기본값은 매개 변수 유형만큼 인터페이스의 일부입니다. 컴파일러가 확인해야합니다. –