2009-09-17 30 views

Trả lời

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) { } 

Bạn chỉ làm tăng thêm giá trị mặc định để khai, không thực hiện.

+0

Cảm ơn, đánh giá cao phản hồi nhanh! – royvandewater

8

Tệp tiêu đề phải có thông số mặc định, cpp không nên.

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

Bạn cần phải đặt tham số mặc định s trong tiêu đề, không phải trong tệp .cpp.

8

Tham số mặc định cần phải được ghi trong tệp tiêu đề.

Foo(int a, int b = 0); 

Trong cpp, khi xác định phương pháp bạn không thể chỉ định tham số mặc định. Tuy nhiên, tôi giữ giá trị mặc định trong mã nhận xét để dễ nhớ.

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

và thay đổi nó ở hai nơi nếu cần? ;-) –

+1

99% số lần, nó sẽ không thay đổi. Vì vậy, bạn đang nói về một trường hợp sử dụng hiếm :-) – Naveen

+1

Theo tôi thì nó quá xấu tiêu chuẩn C++ không * yêu cầu * rằng nó ở cả hai nơi và kiểm tra xem nó có giống nhau hay không. Mặc định cho các tham số là một phần của giao diện như là các kiểu tham số. Trình biên dịch nên kiểm tra nó. –

Các vấn đề liên quan