C++에서 클래스의 다른 멤버 함수에서 오버로드 된 연산자를 호출하는 방법은 무엇입니까? 클래스가, 말, int 형 매개 변수를 (예를 들어, T &operator[](int index);
) 소요 operator[]
의 과부하를 가지고, 그래서 만약오버로드 된 연산자를 어떻게 적용합니까?
0
A
답변
6
가 구성원으로 과부하가있어 가정하면, 일반적으로, (*this)operator<parameter(s)>
를 사용, 다른 멤버 함수 (*this)[2]
로 호출 할 수 있습니다.
무료 함수로 오버로드 된 경우 거의 동일한 종류의 작업을 수행합니다. 당신이 좋아하는 멤버 함수에서 호출 할 수
my_string operator+(my_string const &a, my_string const &b);
: 예를 들어, 가정은 같은 무료 기능을 가진 케이스의 아주이 단순한에서
my_string operator+(my_string const &other) {
return (*this) + other;
}
아마 유용하지,하지만 여전히를 보여줍니다 일반적인 생각.
1
귀하의 질문은 상당히 모호하지만, 그 세 subanswers 중 하나가 작동합니다 :
때마다 당신이 어떤 (비 정적) 멤버 함수 내에서 this
를 사용하려는 당신이 그것을 할 수 있습니다
class A {
int b;
void foo() {
this->b;
}
void bar() {
foo(); // Those calls are the same
this->foo();
this->b;
}
}
C++ 소요 같은 개체 인 this
에 대해주의하십시오. 당신이 operator+=
같은 오버로드 된 연산자를 호출 할 때
, 당신은 할 수 있습니다
void foo()
{
*this += bar;
(*this)[bar]; // for operator[]
}
을 그리고 당신은 부모 클래스의 연산자를 호출 할 필요가있는 경우 :
class A, public Base {
void foo()
{
this->Base::operator+= bar; // Equivalent syntax again
((Base)*this) += bar;
}
}
0
오버로드 된 연산자가 자동으로 호출되며 명시 적 호출이 필요 없습니다. 다음은 연산자 오버로딩의 간단한 예입니다.
class MyNumber
{
private:
int number_;
public:
MyNumber() : number_(0) { }
MyNumber& operator++() // prefix
{
++number_;
return *this;
}
MyNumber operator++(int) // postfix
{
MyNumber result = *this;
++number_; // Calls this->operator++(void);
return result;
}
};
int main(void)
{
MyNumber number;
number++;
++number;
return 0;
}
관련 문제
- 1. gdb에서 오버로드 된 연산자를 어떻게 분해합니까?
- 2. C++ 템플릿에 = 연산자를 오버로드
- 3. C에서 간접 연산자를 오버로드
- 4. [] 연산자를 어떻게 오버로드 할 수 있습니까?
- 5. 기본 추상 클래스에서 오버로드 된 연산자를 어떻게 호출해야합니까?
- 6. 오버로드 된 할당 연산자를 사용하는시기는 언제입니까?
- 7. 오버로드 + = +, ==와 = 연산자를
- 8. 템플릿 클래스의 첨자 연산자를 오버로드
- 9. 인코딩 된 Base64 문자열에 엔트로피를 어떻게 적용합니까?
- 10. 오버로드 연산자를 클래스 내에서 new 사용
- 11. 왜 오버로드 된 연산자를 하나 개의 매개 변수
- 12. 오버로드 된 >> 연산자를 사용하여 파일 읽기
- 13. ++에 오버로드 된 연산자를 사용하지 않는 이유는 무엇입니까?
- 14. 기본 클래스에서 오버로드 된 연산자를 사용하는 파생 클래스에서 오류가 발생했습니다.
- 15. 오버로드 된 연산자를 사용하는 중 일시적인 오류가 발생했습니다.
- 16. 오류 오버로드 된 연산자를 구현할 때 '<<'- C++
- 17. 오버로드 된 오버로드 연산자
- 18. qd 콘텐츠를 어떻게 적용합니까?
- 19. Android에서 권한을 어떻게 적용합니까?
- 20. Demeter의 법칙은 어떻게 적용합니까?
- 21. 코딩 표준은 어떻게 적용합니까?
- 22. 오버로드 된 연산자 인라이닝 C++
- 23. 연산자를 "두 배 오버로드"할 수 있습니까?
- 24. Java는 연산자를 오버로드 할 수 없습니다. 왜?
- 25. Python에서 ++ 연산자를 오버로드 할 수 있습니까?
- 26. 대시를 허용하려면이 RegEx를 어떻게 적용합니까?
- 27. Rails 마이그레이션은 관계를 어떻게 적용합니까?
- 28. EditorFor 필드에 CSS를 어떻게 적용합니까?
- 29. 오버로드 된 연산자가 감지되지 않습니다.
- 30. 액세스 오버로드 된 템플릿 함수
의미를 설명하기 위해 몇 가지 코드를 보여주십시오. 이렇게 묻는 질문은 의미있는 대답을 얻지 못할 것입니다. –
운영자는 회원입니까? – juanchopanza