• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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를 선언해야 한다는 제 이해가 맞을까요??

답변 1

답변을 작성해보세요.

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 결과 값을 다른 곳에서 재사용하고 싶다면 클래스를 반환하는 것이 더 유용합니다)

Ambition님의 프로필

Ambition

질문자

2023.02.14

아하 반환한 객체를 다시 재사용한다는 것에 의의가 있군요!! 감사합니다 :)