할당 연산자는 오버로딩 산술 연산자
T = & 연산자 (CONST의 & t)
로서 선언 될 수있다;클래스에 있지만 산술 연산자를 그런 식으로 정의 할 수 없습니다. 친구 기능이 있어야합니다. 왜 그런지 모르겠다 고요? 설명해 주시겠습니까? 당신이 쓸 수 있도록
할당 연산자는 오버로딩 산술 연산자
T = & 연산자 (CONST의 & t)
로서 선언 될 수있다;클래스에 있지만 산술 연산자를 그런 식으로 정의 할 수 없습니다. 친구 기능이 있어야합니다. 왜 그런지 모르겠다 고요? 설명해 주시겠습니까? 당신이 쓸 수 있도록
그들은 이상적으로, 전역과 반드시 친구가 될한다 : 1은 operator+
가 구성원 인 경우가 적합를 슬로우, yourtype
의 대상이 아닌
yourtype v = 1;
yourtype w = 1 + v;
, 때문에. 그러나 전역으로 설정하면 1을 yourtype
으로 변환 한 다음 작업을 수행합니다. 친구로 만들어서 필요에 따라 yourtype
의 멤버를 추출하고 조작하는 데 도움이됩니다. 예를 들면 다음과 같습니다. operator+=
멤버 함수를 구현하고 operator+
구현에 사용할 수 있습니다.
나는 C++ FAQ Lite이 확실한 답을 줄 것이라고 생각합니다.
a + b
MyClass MyClass::operator + (const MyClass& t) const
{
MyClass ret(*this);
ret += t;
return ret;
}
정말 문법 설탕이다, 컴파일러는 a.operator+(b)
로 확장됩니다 :
산술 연산자
그럼 당신은 다음과 같이 정의 할 수 있습니다 친구가 될 것이 필수가 아닙니다. 이전 샘플은 모든 개체가 MyClass 인스턴스이지만 다른 유형 (예 : 1 + a
)으로 작동해야하는 경우 작동하지 않습니다. 작동하지 않습니다. 이는 친구를 사용하여 해결할 수 있습니다.
MyClass operator + (int i, const MyClass& t)
{
MyClass ret(i);
ret += t;
return ret;
}
+ 연산자의 왼쪽은 클래스가 아니거나 클래스이지만 그 정의에 연산자 +를 추가 할 수없는 경우이 작업을 수행해야합니다.
class A
{
A& operator+(int n);
// ...
}
int main()
{
A my_var;
int integer = 1;
A + integer; // compiles
integer + A // error: no function operator+(int, A) defined
}
가 컴파일되지 않습니다 :
문제는 당신이 뭔가를 할 경우이다. 해결 방법은 연산자 + (int, A)와 연산자 + (A, int)를 A. 의 친구로 정의하는 것입니다. 부스트 연산자 라이브러리는이 프로세스를 매우 쉽게 만듭니다.