domyślne parametry w plikach .h i .cpp

KOMPILATOR: g ++ 4.7.2

Dobrze. Więc jestem zdezorientowany o domyślnych parametrach w.h i.cpp pliki. W wielu miejscach (w tym w tej witrynie) wspomniano, że domyślne parametry można dodawać tylko w plikach .h, a nie w plikach .cpp. Jednak ten kod dowodzi, że to źle:

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;
}

Teraz, zgodnie z tym, co przetestowałem, można dodać domyślne parametry.cpp pliki. Istnieją jednak następujące ograniczenia:

Domyślne parametry obecne w.cpp i.h plik nie powinien się nakładać. to znaczyClass(a, b, c=1) (w pliku .h) iClass::Class(a,b,c=2)(w pliku .cpp) jest nieprawidłowy.

Dobrze znaną regułą jest, że po dodaniu domyślnych parametrów wszystkie zmienne zadeklarowane później muszą również zawierać wartości domyślne. Nazwijmy to tymdefpara reguła. Teraz,

Zmienne podane w deklaracji funkcji (.h plik) powinien przestrzegaćdefpara reguła tj.Class(a, b=2, c) (w pliku .h) jest nieprawidłowy niezależnie od tego, co zostało zadeklarowane w pliku .cpp.

Jeśli weźmie się pod uwagę zmienne o wartościach domyślnych (jako przecięcie wartości domyślnych w.h i.cpp pliki), następowałoby podefpara reguła. to znaczyClass(a, b, c=1) (w pliku .h) iClass::Class(a,b=2,c)( w.cpp plik) jest ważny. AleClass(a, b, c=1) (w pliku .h) iClass::Class(a=2,b,c)( w.cpp plik) jest nieprawidłowy.

Więc .... mam rację, źle ???

questionAnswers(4)

yourAnswerToTheQuestion