-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
operator+ 정의부분에서 궁금한 것이 있습니다.
23.02.11 19:18 작성 23.02.11 21:46 수정 조회수 320
0
Cents operator+(const Cents& right_value)
{
return (this->cents_ + right_value.cents_);//추상적인 클래스는 return by reference가 불가능함!
}
에서 교수님께서는 return Cents(this->cents_ + right_value.cents_);
라고 입력하셨는데, getCents()의 오버로딩을 통한 함수 호출이 아니라서 사실상 return 뒤에 Cents를 안 붙여도 정상적으로 작동하던데 이게 맞나요?
두번째로, 다른 분들의 질문 글을 참조하였는데, 클래스를 반환하는 것이 아닌 아래와 같이 void를 반환하고
friend void operator+(const Cents & c1, const Cents & c2)
{
cout << c1.m_cents + c2.m_cents << endl;
}
int main()
{
Cents cents1(6);
Cents cents2(8);
cents1 + cents2; // 14
도 정상적으로 작동하는데 클래스를 반환하는 것과 void를 반환하는 것중 어느게 더 속도가 빠른가요??
마지막으로, non-member function으로 오버로딩을 할 때 cents1과 cents2는 각각 다른 주소에 멤버변수가 저장되어 있어서 operator+가 private에 접근하려면 friend를 선언해야 한다는 제 이해가 맞을까요??
답변을 작성해보세요.
0
강민철
2023.02.14
Cents operator+(const Cents& right_value)
{
return (this->cents_ + right_value.cents_);//추상적인 클래스는 return by reference가 불가능함!
}
이 되는 이유는 C++ 타입 추론 때문입니다.
this->cents_ + right_value.cents_ 결과는 결과적으로는 Cents객체로 변환되지요.
다만 교수님의 코드 대로 return Cents(this->cents_ + right_value.cents_);
로
return 해주는 것이 더 명확한 표현입니다.
아래 코드 관련한 질문에서는
friend void operator+(const Cents & c1, const Cents & c2)
{
cout << c1.m_cents + c2.m_cents << endl;
}
int main()
{
Cents cents1(6);
Cents cents2(8);
cents1 + cents2; // 14
속도면에서는 크게 차이가 없습니다.
다만 클래스를 반환하는 것이 더 객체지향적이고, 재사용성이 높아집니다. (e..g 결과 값을 다른 곳에서 재사용하고 싶다면 클래스를 반환하는 것이 더 유용합니다)
답변 1