параметры по умолчанию в файлах .h и .cpp
Составитель: g ++ 4.7.2
Хорошо. Поэтому я запутался в параметрах по умолчанию в.h
а также.cpp
файлы. Во многих местах (включая этот сайт) упоминается, что параметры по умолчанию можно добавлять только в файлы .h, а не в файлы .cpp. Тем не менее, этот код доказывает, что это неправильно:
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;
}
Теперь, согласно тому, что я тестировал, параметры по умолчанию могут быть добавлены в.cpp
файлы. Однако действуют следующие ограничения:
Параметры по умолчанию присутствуют в.cpp
а также.h
файл не должен перекрываться. то естьClass(a, b, c=1)
(в файле .h) иClass::Class(a,b,c=2)
(в файле .cpp) недействителен.
Хорошо известно, что после добавления параметров по умолчанию все переменные, объявленные после этого, также должны содержать значения по умолчанию. Давайте назовем этоdefpara править. В настоящее время,
Переменные, указанные в объявлении функции (.h
файл) должен подчинятьсяdefpara правило, т.е.Class(a, b=2, c)
(в файле .h) недействителен независимо от того, что объявлено в файле .cpp.
Если рассматривать переменные, имеющие значения по умолчанию (как пересечение значений по умолчанию в.h
а также.cpp
файлы), это будет следоватьdefpara править. то естьClass(a, b, c=1)
(в файле .h) иClass::Class(a,b=2,c)
( в.cpp
файл) является действительным. НоClass(a, b, c=1)
(в файле .h) иClass::Class(a=2,b,c)
( в.cpp
файл) недействителен.
Так что .... я права, не так ???