del compilatore:g ++ 4.7.2parametri di default nei file .he cpp
OK. Quindi sono confuso sui parametri di default nei file .h
e .cpp
. È menzionato in molti posti (incluso questo sito) che i parametri predefiniti possono essere aggiunti solo in file .h e non in file .cpp. Tuttavia, questo codice si rivela sbagliato:
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;
}
Ora, secondo quello che ho provato, i parametri di default possono essere aggiunto ai file .cpp
. Tuttavia, le seguenti restrizioni tengono:
I parametri di default presenti in
.cpp
e.h
file non deve sovrapposizione. Ad esempioClass(a, b, c=1)
(nel file .h) eClass::Class(a,b,c=2)
(nel file .cpp) non è valido.È una regola ben nota che una volta aggiunti i parametri di default a , tutte le variabili dichiarate dopo devono contenere anche i valori di default . Chiamiamo questa la regola defpara. Ora,
Le variabili indicate nella dichiarazione di funzione (
.h
file) devono obbedire al defpara regola vale a direClass(a, b=2, c)
(nel file h) è valida indipendentemente da ciò che è dichiarato nel file cpp.Se si considerano le variabili aventi valori di default (come un intersezione dei valori standard di
.h
e.cpp
file), sarebbe seguire il defpara regola. Ad esempio,Class(a, b, c=1)
(nel file .h) eClass::Class(a,b=2,c)
(nel file.cpp
) è valido. MaClass(a, b, c=1)
(nel file .h) eClass::Class(a=2,b,c)
(nel file.cpp
) è non valido.
Quindi .... ho ragione, ho sbagliato ???
significa in definizione di metodo in file cpp, non è necessario scrivere il valore predefinito? – laike9m
Sì, non dovresti averlo due volte e il file di intestazione è dove appartiene. –