parâmetros padrão em arquivos .h e .cpp
COMPILADOR: g ++ 4.7.2
Está bem. Então estou confuso sobre os parâmetros padrão em.h
e.cpp
arquivos. É mencionado em muitos locais (incluindo este site) que os parâmetros padrão podem ser adicionados somente em arquivos .h e não em arquivos .cpp. No entanto, este código prova errado:
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;
}
Agora, de acordo com o que testei, os parâmetros padrão podem ser adicionados.cpp
arquivos. No entanto, as seguintes restrições mantêm:
Os parâmetros padrão presentes no.cpp
e.h
arquivo não deve se sobrepor. isto éClass(a, b, c=1)
(no arquivo .h) eClass::Class(a,b,c=2)
(no arquivo .cpp) é inválido.
É uma regra bem conhecida que depois que os parâmetros padrão foram adicionados, todas as variáveis declaradas depois disso também devem conter valores padrão. Vamos chamar isso dedefpara regra. Agora,
As variáveis indicadas na declaração de função (.h
arquivo) deve obedecerdefpara regra ou sejaClass(a, b=2, c)
(no arquivo .h) é inválido, independentemente do que está declarado no arquivo .cpp.
Se considerarmos as variáveis com valores padrão (como uma interseção de valores padrão em.h
e.cpp
arquivos), seguiria adefpara regra. isto éClass(a, b, c=1)
(no arquivo .h) eClass::Class(a,b=2,c)
( em.cpp
arquivo) é válido. MasClass(a, b, c=1)
(no arquivo .h) eClass::Class(a=2,b,c)
( em.cpp
arquivo) é inválido.
Então ... estou certo, errado ???