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