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 ???

questionAnswers(4)

yourAnswerToTheQuestion