생성자의 기본 인수
-
06-07-2019 - |
문제
이와 같은 생성자에서 기본 인수를 사용할 수 있습니까?
Soldier(int entyID, int hlth = 100, int exp = 10, string nme) : entityID(entyID = globalID++), health(hlth), experience(exp), name(nme = SelectRandomName(exp))
{ }
예를 들어 Exp = 10을 기본적으로 원하지만 생성자에 공급하면이 값을 재정의 할 수 있습니다. 그렇지 않으면 기본값을 사용해야합니다.
어떻게 할 수 있습니까? 내 접근 방식이 작동하지 않는다는 것을 알고 있습니다 ....
생성자에 공급하는 모든 것이 제작자에 값을 제공 할 때마다 제작자에 공급되는 모든 것을 초기화에 상관없이 초기화 목록에 값을 공급하는 경우 값을 공급할 때마다 처음에는 기본값이 필요한 이유는 무엇입니까? 객체 시작을 위해 ...?
다른 과부하 된 생성자를 사용해야합니까? 아니면 사람들이 다른 아이디어를 가지고 있습니까 ....?
해결책
기본 인수는 매개 변수 목록의 끝까지 확장되는 연속적인 매개 변수 범위에만 제공 될 수 있습니다. 간단히 말하면, 기본 인수를 1, 2, 3, ... N에 제공 할 수 있습니다. 마지막 함수의 매개 변수. 위에서 시도하는 것처럼 매개 변수 목록의 중간에있는 기본 인수를 매개 변수에 제공 할 수 없습니다. 매개 변수를 재정렬하십시오 (put hlth
그리고 exp
결국) 또는 기본 인수를 제공합니다. nme
또한.
또한 생성자 이니셜 라이저 목록은 의미가없는 것 같습니다. 지나가는 요점은 무엇입니까? entyID
그리고 nme
외부에서 생성자 이니셜 라이저 목록에서 어쨌든 값을 무시하면?
다른 팁
기본 인수가있는 모든 매개 변수는 필요한 인수 후에야합니다. 당신은 움직여야합니다 nme
전에 매개 변수 hlth
.
나는 당신이 이것을 할 수 있다고 생각하지만, 당신의 모든 기본 args는 끝에 갈 필요가 있습니다. 그래서 당신의 예에서는 생성자 서명이
Soldier(int entyID, string nme, int hlth = 100, int exp = 10);
기본값을 가진 인수는 함수 선언의 마지막 인수 여야합니다. 다시 말해, 기본값을 따르는 기본값이없는 인수는 없을 수 있습니다.
후행 인수만이 기본 인수 일 수 있습니다. 당신은 주어야 할 것입니다 nme
기본 인수 또는 생성자가 취하는 인수의 순서를 변경합니다. hlth
그리고 exp
마지막으로 오세요.
이니셜리스트 목록에서 할당하는 과제와 관련하여 무슨 일이 일어나는지 entityID
할당에 의해 반환되는 값이 할당됩니다. globalID++
에게 entyID
그것은 가치가 될 것입니다 entyID
과제 후. 비슷한 일이 발생합니다 name
.