Составитель:г ++ 4.7.2параметры по умолчанию в .h и .cpp файлов
Ok. Поэтому я смущен параметрами по умолчанию в файлах .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
) является недействительным.
Итак .... Я прав, неправильно ???
Означает ли это, в определении метода в cpp file, нет необходимости писать значение по умолчанию? – laike9m
Да, вы не должны иметь его дважды, а заголовочный файл - там, где он принадлежит. –