параметры по умолчанию в файлах .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 файл) недействителен.

Так что .... я права, не так ???

Ответы на вопрос(4)

Ваш ответ на вопрос