biên dịch:g ++ 4.7.2thông số mặc định trong file .h và .cpp
Ok. Vì vậy, tôi bối rối về các tham số mặc định trong các tệp .h
và .cpp
. Nó được đề cập ở nhiều nơi (bao gồm cả trang web này) rằng các tham số mặc định có thể được thêm vào chỉ trong các tệp .h và không có trong tệp .cpp. Tuy nhiên, mã này đã chứng minh nó sai:
test1.h
#pragma once
#include <iostream>
using namespace std;
class Class{
public:
Class(int, int, int=1);
};
test1.cpp
#include "test1.h"
Class::Class(int a, int b=2, int c)
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
int main()
{
Class a(1);
return 0;
}
Bây giờ, theo những gì tôi đã thử nghiệm, các thông số mặc định có thể được thêm vào .cpp
tệp. Tuy nhiên, những hạn chế sau giữ:
Các thông số mặc định có mặt trong
.cpp
và.h
tập tin không nên chồng chéo. tức làClass(a, b, c=1)
(trong tệp .h) vàClass::Class(a,b,c=2)
(trong tệp .cpp) không hợp lệ.Đó là quy tắc nổi tiếng khi các tham số mặc định đã được thêm , tất cả các biến được khai báo sau đó cũng phải chứa giá trị mặc định. Cho phép gọi đây là quy tắc defpara. Bây giờ,
Các biến được nêu trong phần khai báo hàm (
.h
tập tin) nên tuân theo defpara rule ví dụClass(a, b=2, c)
(trong file .h) là không hợp lệ không phụ thuộc vào những gì đang khai báo trong tập tin cpp.Nếu ta xem xét các biến có giá trị mặc định (như là một ngã tư các giá trị mặc định trong
.h
và.cpp
files), nó sẽ theo defpara quy tắc. tức làClass(a, b, c=1)
(trong tệp .h) vàClass::Class(a,b=2,c)
(trong.cpp
tệp) hợp lệ. NhưngClass(a, b, c=1)
(trong tệp .h) vàClass::Class(a=2,b,c)
(trong.cpp
tệp) là không hợp lệ.
Vì vậy .... Tôi đúng, sai ???
Liệu nó có nghĩa trong định nghĩa phương pháp trong cpp tập tin, không cần phải viết giá trị mặc định? – laike9m
Có, bạn không nên có nó hai lần, và tập tin tiêu đề là nơi nó thuộc về. –