Tôi có một tập tin cpp như thế này:Constructors với các thông số mặc định trong header file
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Làm thế nào để tham khảo này trong foo.h?
Tôi có một tập tin cpp như thế này:Constructors với các thông số mặc định trong header file
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Làm thế nào để tham khảo này trong foo.h?
.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.
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;
}
Bạn cần phải đặt tham số mặc định s trong tiêu đề, không phải trong tệp .cpp.
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 */)
và thay đổi nó ở hai nơi nếu cần? ;-) –
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
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ảm ơn, đánh giá cao phản hồi nhanh! – royvandewater