domyślne parametry w plikach .h i .cpp
KOMPILATOR: g ++ 4.7.2
Dobrze. Więc jestem zdezorientowany o domyślnych parametrach w.h
i.cpp
pliki. W wielu miejscach (w tym w tej witrynie) wspomniano, że domyślne parametry można dodawać tylko w plikach .h, a nie w plikach .cpp. Jednak ten kod dowodzi, że to źle:
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;
}
Teraz, zgodnie z tym, co przetestowałem, można dodać domyślne parametry.cpp
pliki. Istnieją jednak następujące ograniczenia:
Domyślne parametry obecne w.cpp
i.h
plik nie powinien się nakładać. to znaczyClass(a, b, c=1)
(w pliku .h) iClass::Class(a,b,c=2)
(w pliku .cpp) jest nieprawidłowy.
Dobrze znaną regułą jest, że po dodaniu domyślnych parametrów wszystkie zmienne zadeklarowane później muszą również zawierać wartości domyślne. Nazwijmy to tymdefpara reguła. Teraz,
Zmienne podane w deklaracji funkcji (.h
plik) powinien przestrzegaćdefpara reguła tj.Class(a, b=2, c)
(w pliku .h) jest nieprawidłowy niezależnie od tego, co zostało zadeklarowane w pliku .cpp.
Jeśli weźmie się pod uwagę zmienne o wartościach domyślnych (jako przecięcie wartości domyślnych w.h
i.cpp
pliki), następowałoby podefpara reguła. to znaczyClass(a, b, c=1)
(w pliku .h) iClass::Class(a,b=2,c)
( w.cpp
plik) jest ważny. AleClass(a, b, c=1)
(w pliku .h) iClass::Class(a=2,b,c)
( w.cpp
plik) jest nieprawidłowy.
Więc .... mam rację, źle ???