사전 증가 연산자 오버로딩이 올바른 결과를 표시하지 않음

Nischalinn

friend 함수를 사용하여 사전 증가 연산자를 오버로드했습니다. 오버로드 된 friend 함수에서 변수 값이 올바르게 표시됩니다. 하지만 그 값은 디스플레이 기능에 표시되지 않습니다. 왜 그런가요?

#include <iostream>
using namespace std;

class Rectangle {
public:
    int breadth;

public:
    void read();
    void display();
    friend void operator ++(Rectangle r1);
};
void Rectangle::read()
{
    cout << "Enter the breadth of the Rectangle: ";
    cin >> breadth;
}
void operator++(Rectangle r1)
{
    ++r1.breadth;
    cout<<r1.breadth<<endl; //correct result
}
void Rectangle::display()
{
    cout<<breadth<<endl; // not showing pre-incremented value, why ???
}
int main()
{
    cout<<"Unary Operator using Friend Function \n";
    Rectangle r1;
    r1.read();
    ++r1;
    cout << "\n breadth of Rectangle after increment: ";
    r1.display();
    return 0;
}
Angew는 더 이상 SO를 자랑스럽게 생각하지 않습니다.

하신 operator ++얻어 Rectangle그것이 수신 수단에 의하여 값 객체 복사본 의 피연산자를. 그런 다음 사본의 breadth구성원 을 성실하게 증가시키고 인쇄 한 다음 끝날 때 사본을 버립니다.

참조로 매개 변수를 사용하는 것이 좋습니다.

friend void operator ++(Rectangle &r1)
{
  ++r1.breadth;
}

또한 자유 함수 대신 멤버 함수를 사용하여 단항 연산자를 오버로드하는 것이 매우 일반적입니다. 이렇게 사용하면이 문제가 발생하지 않습니다.

class Rectangle
{
  // ...

public:
  void operator++ ()
  {
    ++breadth;
  }

  // ...
};

몇 가지 추가 의견 :

  • operator++기본 제공 연산자가 수행하는 작업을 모방하기 위해 피연산자에 대한 참조를 반환하는 것이 일반적입니다 . ++ ++ i대해 int i할 수있는 것처럼 ++ ++ r사용자 정의 유형 r에 대해서도 가능해야합니다 .

  • 실제로 연산자 오버로딩은 a) 내장 유형과 유사하게 동작하는 유형을 작성하거나 b) 도메인 별 언어를 작성하는 경우에만 사용해야합니다. 사각형을 늘리는 것은 직관적으로 설명 할 수있는 것이 아니며 명명 된 멤버 함수로 수행하는 것이 가장 좋습니다. ++r너비, 높이 또는 둘 다 증가 하는지 , 직사각형을 오른쪽으로 이동하는지 또는 ...을 어떻게 알 수 있습니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

생성자 함수가 올바른 결과를 표시하지 않음

분류에서Dev

[] 오버로딩하지만 다른 연산자와 상호 작용하기 전에 결과가 해결되지 않음 (C ++)

분류에서Dev

C ++에서 증분 연산자로 올바른 결과를 얻지 못함

분류에서Dev

JS for 루프가 올바른 결과를 표시하지 않음

분류에서Dev

PHP 계산 결과가 올바른 통화 형식을 표시하지 않음

분류에서Dev

inotifywait가 올바른 경로를 표시하지 않음

분류에서Dev

Crystal Report가 올바른 데이터를 표시하지 않음

분류에서Dev

사전 증가 및 사후 증가 연산자를 사용하는 동안 매크로의 이상한 결과

분류에서Dev

Joomla, 갠트리 템플릿. 페이지가 올바른 사이드 바를 표시하지 않음

분류에서Dev

사용자 정의 이메일 검증 지시문이 검증 결과를 표시하지 않음

분류에서Dev

mySQL Group By Max 쿼리가 올바른 결과를 산출하지 않음

분류에서Dev

올바른 쿼리를 사용할 때 데이터가 표시되지 않음

분류에서Dev

mysqli_fetch_array가 올바른 결과를 표시하지 않음

분류에서Dev

삽입 연산자 오버로딩 : 'unsigned int'유형의 오른쪽 피연산자를 사용하는 연산자가 없습니다 (또는 허용되는 변환이 없음).

분류에서Dev

-eq의 쉘 테스트 연산자가 올바른 결과를 제공하지 않습니다.

분류에서Dev

Firebase Firestore를 사용하는 Flutter가 올바른 아이콘을 표시하지 않음 (Like Button System)

분류에서Dev

사용자 정의 어댑터가 올바른 정보를 표시하지 않음

분류에서Dev

ASP Repeater가 데이터를 올바른 순서로 표시하지 않음

분류에서Dev

C ++에서 증가 / 감소 연산자를 사용하여 배열을 표시하는 이상한 결과

분류에서Dev

사용자 지정 수신기가 이미지를 올바르게 표시하지 않음

분류에서Dev

MongoDB : $ geoWithin 연산자를 사용하여 올바른 결과를 얻지 못함

분류에서Dev

file_get_contents가 올바른 결과를 가져 오지 않음

분류에서Dev

PHP for 루프가 올바른 데이터를 표시하지 않음

분류에서Dev

극좌표 매그너스 효과가 올바른 데이터를 표시하지 않음

분류에서Dev

이 사전에서 올바른 방식으로 숫자를 합산하는 방법 (아무것도 가져 오지 않고)

분류에서Dev

IE가 사이드 바 전환을 올바르게 표시하지 않음

분류에서Dev

MySQL COUNT가 올바른 결과를 제공하지 않음

분류에서Dev

IQueryable Include가 올바른 결과를 제공하지 않음

분류에서Dev

SQL 쿼리가 올바른 결과를 반환하지 않음

Related 관련 기사

  1. 1

    생성자 함수가 올바른 결과를 표시하지 않음

  2. 2

    [] 오버로딩하지만 다른 연산자와 상호 작용하기 전에 결과가 해결되지 않음 (C ++)

  3. 3

    C ++에서 증분 연산자로 올바른 결과를 얻지 못함

  4. 4

    JS for 루프가 올바른 결과를 표시하지 않음

  5. 5

    PHP 계산 결과가 올바른 통화 형식을 표시하지 않음

  6. 6

    inotifywait가 올바른 경로를 표시하지 않음

  7. 7

    Crystal Report가 올바른 데이터를 표시하지 않음

  8. 8

    사전 증가 및 사후 증가 연산자를 사용하는 동안 매크로의 이상한 결과

  9. 9

    Joomla, 갠트리 템플릿. 페이지가 올바른 사이드 바를 표시하지 않음

  10. 10

    사용자 정의 이메일 검증 지시문이 검증 결과를 표시하지 않음

  11. 11

    mySQL Group By Max 쿼리가 올바른 결과를 산출하지 않음

  12. 12

    올바른 쿼리를 사용할 때 데이터가 표시되지 않음

  13. 13

    mysqli_fetch_array가 올바른 결과를 표시하지 않음

  14. 14

    삽입 연산자 오버로딩 : 'unsigned int'유형의 오른쪽 피연산자를 사용하는 연산자가 없습니다 (또는 허용되는 변환이 없음).

  15. 15

    -eq의 쉘 테스트 연산자가 올바른 결과를 제공하지 않습니다.

  16. 16

    Firebase Firestore를 사용하는 Flutter가 올바른 아이콘을 표시하지 않음 (Like Button System)

  17. 17

    사용자 정의 어댑터가 올바른 정보를 표시하지 않음

  18. 18

    ASP Repeater가 데이터를 올바른 순서로 표시하지 않음

  19. 19

    C ++에서 증가 / 감소 연산자를 사용하여 배열을 표시하는 이상한 결과

  20. 20

    사용자 지정 수신기가 이미지를 올바르게 표시하지 않음

  21. 21

    MongoDB : $ geoWithin 연산자를 사용하여 올바른 결과를 얻지 못함

  22. 22

    file_get_contents가 올바른 결과를 가져 오지 않음

  23. 23

    PHP for 루프가 올바른 데이터를 표시하지 않음

  24. 24

    극좌표 매그너스 효과가 올바른 데이터를 표시하지 않음

  25. 25

    이 사전에서 올바른 방식으로 숫자를 합산하는 방법 (아무것도 가져 오지 않고)

  26. 26

    IE가 사이드 바 전환을 올바르게 표시하지 않음

  27. 27

    MySQL COUNT가 올바른 결과를 제공하지 않음

  28. 28

    IQueryable Include가 올바른 결과를 제공하지 않음

  29. 29

    SQL 쿼리가 올바른 결과를 반환하지 않음

뜨겁다태그

보관