Standard argumenter i konstruktør

stemmer
2

Kan jeg bruke standard argumenter i en konstruktør som dette kanskje

Soldier(int entyID, int hlth = 100, int exp = 10, string nme) : entityID(entyID = globalID++), health(hlth), experience(exp), name(nme = SelectRandomName(exp)) { }

Jeg vil for eksempel exp = 10 som standard, men kan overstyre denne verdien hvis jeg leverer den i konstruktøren ellers bør den bruke standard.

Hvordan kan jeg gjøre dette, jeg vet at min tilnærming fungerer ikke ....

Hvis jeg levere noen verdi i initialisering liste uansett hva jeg kommer med, konstruktør blir overskrevet selvsagt på den annen side når jeg leverer en verdi i konstruktør så hvorfor trenger jeg en standardverdi i første omgang som hver gang jeg leverer en verdi for objekt initiering ...?

Bør jeg bruke ulike overbelastet konstruktører, eller har dere noen andre ideer ....?

Publisert på 27/10/2009 klokken 23:03
kilden bruker
På andre språk...                            


5 svar

stemmer
2

Alle parametre med standard argumentene må være etter eventuelle nødvendige argumenter. Du bør flytte nmeparameteren før hlth.

Svarte 27/10/2009 kl. 23:06
kilden bruker

stemmer
8

Standard argumenter kan kun tilføres en sammenhengende rekke parametre som strekker seg til enden av parameterlisten. Bare sett, kan du levere standard argumenter til 1, 2, 3, ... N siste parameterne for en funksjon. Du kan ikke levere standard argumenter til parametre i midten av parameterlisten, som du prøver å gjøre ovenfor. Enten omorganisere parametere (satt hlthog exppå slutten) eller levere en standard argument for nmeogså.

I tillegg gjør du konstruktør initializer liste ikke ut til å gjøre noe fornuftig. Hva var poenget med bestått entyIDog nmefra utsiden, hvis du overstyre sine verdier uansett i konstruktøren initializer listen?

Svarte 27/10/2009 kl. 23:06
kilden bruker

stemmer
2

Jeg tror du kan gjøre dette, men ville alle misligholdte args trenger å gå på slutten. Så, i ditt eksempel, ville konstruktøren signaturen være

Soldier(int entyID, string nme, int hlth = 100, int exp = 10);
Svarte 27/10/2009 kl. 23:07
kilden bruker

stemmer
1

Argumenter med standardverdier må være de siste argumentene i funksjonen erklæringen. Med andre ord, kan det ikke være noen argumenter uten standardverdier etter en med en standardverdi.

Svarte 27/10/2009 kl. 23:07
kilden bruker

stemmer
1

Bare etterfølgende argumenter kan være standard argumenter. Du må gi nmeen standard argument eller endre rekkefølgen av argumentene som konstruktøren tar så hlthog expkomme sist.

Når det gjelder oppgaven du gjør i initialiser liste hva som skjer der er at medlemmet entityIDblir tildelt verdien som returneres av tildeling av globalID++til entyIDsom vil være verdien av entyIDetter oppdraget. En lignende ting skjer for name.

Svarte 27/10/2009 kl. 23:10
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more