C ++ 핵심 원칙 C.87 : 신중하게 기본 클래스의 평등 사업자

C.87는 : 기본 클래스에 ==주의

C.87 :주의 기본 클래스의 평등 사업자

 

 

이유 (이유)

 

 

 

 

계층 구조에 대한 절대 안전한 유용한 == 쓰기 정말 어렵습니다.

쓰기 간단하고 동일한 상속 시스템 운영자를 사용하기 쉬운 정말 어렵다.

 

 

 

예 나쁜 (네가티브 샘플)

 

class B {
    string name;
    int number;
    virtual bool operator==(const B& a) const
    {
         return name == a.name && number == a.number;
    }
    // ...
};

B의 비교는 두 번째 피연산자의 전환을 허용하지만, 처음 없습니다.

두 번째 피연산자 B 수용 형식 변환 불평등하지만 제 없다.

class D :B {
    char character;
    virtual bool operator==(const D& a) const
    {
        return name == a.name && number == a.number && character == a.character;
    }
    // ...
};

B b = ...
D d = ...
b == d;    // compares name and number, ignores d's character
d == b;    // error: no == defined
D d2;
d == d2;   // compares name, number, and character
B& b2 = d2;
b2 == d;   // compares name and number, ignores d2's and d's character

물론이 계층 구조 == 작업을 만드는 방법이 있지만 순진한 접근 방식은 규모를하지 않습니다

물론, 상속 계층 구조에서 동일한 비교 연산자 동작을 만들 수있는 방법,하지만 간단한 방법이있다.

 

 

 

Note (주의)

 

이 규칙은 모든 일반적인 비교 연산자에 적용! =, <, <=,> 및> =.

이 규칙은 모든 일반적인 비교 연산자에 적용 :! =, <, <=,>, 그리고> =.

 

 

 

시행 (제안)

 

  • 플래그 가상 운영자 == (); 다른 비교 연산자에 대한 동일! =, <, <=,> 및> =.

  • = <, <=,>, 및> =! 기타 비교 동일하다 팁 불평등 가상 함수로 정의

 

 

설명 링크

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c87-beware-of--on-base-classes

 


 

이 기사가 도움이 생각? 에 오신 것을 환영합니다 엄지 손가락은 더 많은 사람들과 공유 할 수 있습니다.

더 업데이트 된 기사를 읽고, 객체 지향 사고의 마이크로 채널 대중 번호로하시기 바랍니다에주의 []

게시 된 408 개 원래 기사 · 원 찬양 653 · 전망 290 000 +

추천

출처blog.csdn.net/craftsman1970/article/details/104928318