하나는 서브 클래스를 비교하는연산자 ==
operator==(const Base& base)
구현하는 방법을 s.t. 무료 서 함수로 연산자 ==를 구현
Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
하나는 서브 클래스를 비교하는연산자 ==
operator==(const Base& base)
구현하는 방법을 s.t. 무료 서 함수로 연산자 ==를 구현
Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
Derived1::IsEqual(const Base& base)
을 호출이 점에 당신을 얻을 수
. 당신은 몇 가지 옵션이 여기에서
virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
을 구현할 수, 유도의 수가 작고 유한 한 경우 기본이
을 Derived1하기> <를 dynamic_cast는합니다 행동 양식. Derived1에서는 실제를 재정의하고 비교합니다.
이것은 연산자 ==에 대한 특정 질문보다는 클래스 및 유형에 대한 일반적인 C++ 질문처럼 보입니다. 내 지식에 따라 특정 예제에서 다른 방법은 없지만 사용할 수 있습니다. dynamic_cast
가상 함수를 사용하여 dynamic_cast없이 수행 할 수 있습니다. –
그럼 base1이 적절한 호출을 받거나 입력 인자가 Base가 아닌 Derived2라는 것을 알 수있는 문제가 무엇입니까? 첫 번째는 가상 함수 (나는 동의 함)를 사용하여 해결되며, 두 번째는 dynamic_cast – rodrigob
'operator =='는 독립 실행 형 함수로 구현되어야하며, 그렇지 않은 경우에는 인수에 대칭이 아닙니다. – Philipp
더 효과적인 C++에서 이중 디스패치에 대한 좋은 토론이 있습니다. –
'Derived1'은'Derived2'와 동일 할 수 있습니까? 자세한 정보를 입력하십시오. – curiousguy