Standardparameter in .h- und .cpp-Dateien

COMPILER: g ++ 4.7.2

OK. Ich bin also verwirrt über die Standardparameter in.h und.cpp Dateien. An vielen Stellen (einschließlich dieser Site) wird erwähnt, dass Standardparameter nur in H-Dateien und nicht in CPP-Dateien hinzugefügt werden können. Dieser Code beweist jedoch, dass es falsch ist:

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;
}

Nun können nach meinen Tests Standardparameter hinzugefügt werden.cpp Dateien. Es gelten jedoch folgende Einschränkungen:

Die Standardparameter in.cpp und.h Datei sollte nicht überlappen. d.h.Class(a, b, c=1) (in .h Datei) undClass::Class(a,b,c=2)(in CPP-Datei) ist ungültig.

Es ist allgemein bekannt, dass nach dem Hinzufügen von Standardparametern alle danach deklarierten Variablen auch Standardwerte enthalten müssen. Nennen wir das dasdefpara Regel. Jetzt,

Die in der Funktionsdeklaration angegebenen Variablen (.h datei) sollte dem gehorchendefpara Regel d. h.Class(a, b=2, c) (in der .h-Datei) ist ungültig, unabhängig davon, was in der .cpp-Datei deklariert ist.

Betrachtet man die Variablen mit Standardwerten (als Schnittmenge von Standardwerten in.h und.cpp Dateien), würde es dem folgendefpara Regel. d.h.Class(a, b, c=1) (in .h Datei) undClass::Class(a,b=2,c)( im.cpp Datei) ist gültig. AberClass(a, b, c=1) (in .h Datei) undClass::Class(a=2,b,c)( im.cpp Datei) ist ungültig.

Also .... ich habe Recht, Unrecht ???

Antworten auf die Frage(4)

Ihre Antwort auf die Frage