>  기사  >  백엔드 개발  >  C 메서드에서 멤버 변수를 기본 인수로 사용할 수 있나요?

C 메서드에서 멤버 변수를 기본 인수로 사용할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-14 14:37:01626검색

Can I Use Member Variables as Default Arguments in C   Methods?

C에서 멤버 변수를 기본 인수로 사용

소개

여러 인수를 취하는 메소드로 클래스를 생성할 때 다음을 만드는 것이 도움이 될 수 있습니다. 일부 인수는 선택 사항입니다. 기본 인수 기능을 사용하면 클라이언트 코드에서 값이 제공되지 않을 때 사용할 수 있는 인수의 기본값을 설정할 수 있습니다.

문제: 비정적 멤버 변수를 기본 인수로 사용

귀하의 경우 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.