문제

이와 같은 생성자에서 기본 인수를 사용할 수 있습니까?

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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top