COMPILER: g++ 4.7.2
Ok. So I am confused about default parameters in .h
and .cpp
files. It is mentioned in many places( including this site) that default parameters can be added only in .h files and not in .cpp files.
However, this code proves it wrong:
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;
}
Now, according to what I have tested, default parameters can be added to .cpp
files. However, the following restrictions hold:
The default parameters present in
.cpp
and.h
file should not overlap. i.e.Class(a, b, c=1)
(in .h file) andClass::Class(a,b,c=2)
( in .cpp file) is invalid.It is a well known rule that once default parameters have been added, all the variables declared after that must also contain default values. Lets call this the defpara rule. Now,
The variables stated in the function declaration(
.h
file) should obey the defpara rule i.e.Class(a, b=2, c)
(in .h file) is invalid irrespective of what's declared in .cpp file.If one considers the variables having default values (as an intersection of default values in
.h
and.cpp
files), it would follow the defpara rule. i.e.Class(a, b, c=1)
(in .h file) andClass::Class(a,b=2,c)
( in.cpp
file) is valid. ButClass(a, b, c=1)
(in .h file) andClass::Class(a=2,b,c)
( in.cpp
file) is invalid.
So....I am right, wrong???