class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
// Overload cCents + int
friend Cents operator+(const Cents &cCents, int nCents);
int GetCents() { return m_nCents; }
};
// note: this function is not a member function!
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
int main()
{
Cents c1 = Cents(4) + 6;
std::cout << "I have " << c1.GetCents() << " cents." << std::endl;
return 0;
}
그것은 나에게 평가 라인C++ 인스턴스화 "암시"Сlass 개체
Cents c1 = Cents(4) + 6;
에서 어떻게 표현
Cents(4)+6
분명하지 않다. 예, Cents와 int 유형의 피연산자에 대해 연산자 "+"가 오버로드되고 있음을 알고 있습니다.
저는 Censt (4)가 생성자라는 것을 알고 있습니다 만, 맞습니까? 그래서 언제
Cents operator+(const Cents &cCents, int nCents)
{
return Cents(cCents.m_nCents + nCents);
}
라고하면 c 센트는 센트 (4)에 대한 참조가됩니까? 우리는 멤버 선택 연산자를 통해 액세스 m_nCents 때문에
return Cents(cCents.m_nCents + nCents);
하나가 cCenst 추론 할 수있는 선에서
형 Censt의 목적이다 "." 그러나 Censt (4)는 클래스 객체가 아닌 생성자입니다.cCenst가 Cents (4)에 대한 참조가 아닌 것은 나에게 의미가있는 것처럼 보입니다.
여기에 태그 수를 줄이고 질문에 C++ 태그를 적용해야합니다 (이것이 C++ 인 경우). –
이 질문이 연산자 오버로딩과 관련이 있는지는 알 수 없습니다. 왜 사용법 예제가'foo (Cents (4)) '인 임의의 함수'void foo (const Cents &)'와 관련되어 있기 때문에 그것을 놓을 수 없습니까? –
그래, 내 예제는 연산자 오버로딩과 관련이 없지만 클래스 객체를 참조로 함수에 전달하는 것과 관련이 있음을 인정해야한다. 그러나 나는 코드를 편집하지 않고 연산자 오버로딩을 제거하지 않을 것입니다. 왜냐하면 나는 이해할 수있는 예를 생각해 낼 수 없기 때문입니다. 그러나 현명한 발언을 고려하여 나는 질문 제목을 바꿀 것이다. –