여러 인수를 취하는 메소드로 클래스를 생성할 때 다음을 만드는 것이 도움이 될 수 있습니다. 일부 인수는 선택 사항입니다. 기본 인수 기능을 사용하면 클라이언트 코드에서 값이 제공되지 않을 때 사용할 수 있는 인수의 기본값을 설정할 수 있습니다.
귀하의 경우 MoveTo 멤버 함수의 기본 인수로 멤버 변수(initPos)를 사용하려고 했습니다. 그러나 컴파일러는 비정적 데이터 멤버의 잘못된 사용을 나타내는 오류를 발행했습니다.
멤버 변수는 일부로 간주되므로 기본적으로 메서드 범위에서 액세스할 수 없습니다. 메소드의 컨텍스트가 아니라 객체의 상태에 관한 것입니다. 결과적으로 멤버 함수의 기본 인수는 클래스 내 또는 전역 범위 요소에만 의존할 수 있습니다.
이 문제를 해결하려면 메서드 오버로딩을 사용해야 합니다. . 메서드 오버로드를 사용하면 서로 다른 시그니처를 사용하여 동일한 메서드의 여러 버전을 만들 수 있습니다. 코드에서 이를 구현하는 방법은 다음과 같습니다.
// Object.h class Object { public: ... void MoveTo(double speed); void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
// Object.c void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Everything is done here. }
MoveTo 메서드의 두 가지 버전을 정의하면 멤버 변수에 직접 의존하지 않고도 기본 인수를 효과적으로 제공할 수 있습니다. MoveTo(double) 메서드는 initPos 값을 두 번째 인수로 사용하여 MoveTo(double, Point) 메서드를 호출하므로 원하는 기능을 유지하고 컴파일러 오류를 방지할 수 있습니다.
위 내용은 C 메서드에서 멤버 변수를 기본 인수로 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!