>백엔드 개발 >C++ >왜 내 매트릭스 클래스의 `

왜 내 매트릭스 클래스의 `

Patricia Arquette
Patricia Arquette원래의
2024-12-18 08:43:14935검색

Why Does My Matrix Class's `

<<의 모호한 오버로딩 ostream 연산자

<< Matrix 클래스의 연산자는 연산자 함수가 정확히 하나의 인수를 취해야 한다는 요구 사항에서 비롯됩니다. 이 경우 다음 코드로 인해 오류가 발생할 가능성이 높습니다.

std::ostream&amp; Matrix::operator <<(std::ostream&amp; stream, const Matrix&amp; matrix) {

    [...]

}

연산자<< function은 Matrix 클래스의 멤버 함수로 정의되며 암시적으로 Matrix 개체를 인수로 사용합니다. 결과적으로 함수는 실제로 ostream 개체와 Matrix 개체라는 두 가지 인수를 사용합니다.

이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

  1. 친구 함수 사용: 친구 함수는 클래스의 멤버는 아니지만 해당 클래스의 private 및 protected 멤버에 액세스할 수 있습니다. 연산자<< 함수를 friend 함수로 사용하면 암시적 Matrix 객체 인수를 피할 수 있습니다.

    friend std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) {
        [...]
    }
  2. Matrix 객체를 참조로 전달: Matrix 객체를 다음과 같이 전달합니다. 참조를 사용하면 암시적 Matrix 객체 인수를 피할 수 있습니다.

    std::ostream&amp; operator<< (std::ostream&amp; stream, const Matrix&amp; matrix) const {
        [...]
    }

참고 두 번째 옵션에는 연산자<<가 필요합니다. 함수는 Matrix 객체를 수정하지 않으므로 const로 선언해야 합니다.

위 내용은 왜 내 매트릭스 클래스의 `의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.