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
이 기사가 도움이 생각? 에 오신 것을 환영합니다 엄지 손가락은 더 많은 사람들과 공유 할 수 있습니다.
더 업데이트 된 기사를 읽고, 객체 지향 사고의 마이크로 채널 대중 번호로하시기 바랍니다에주의 []