КОМПЬЮТЕР: 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
файле) являются недопустимыми.
Итак... Я прав, неправильно???