순수 가상 메서드가있는 "Parent"추상 클래스와이 메서드와 멤버 "value"를 구현하는 자식 클래스 "Child"가 있습니다. 동적 클래스의 수단으로 shared_ptr이라는 자식 클래스의 객체를 인스턴스화합니다. 나는이 객체들을 std :: vector에 저장하기 때문에 shared_ptr을 참조 대신 여기에 사용한다.shared_ptr을 사용하는 추상 기본 클래스의 자식에 대한 C++ == 연산자
이제 "someObject"와 "anotherObject"두 개 객체를 내 소스 코드 하단에 정의 된 것과 비교하고 싶습니다. 따라서 해당 Child 클래스에서 == 연산자를 덮어 썼습니다. 그럼에도 불구하고 shared_ptr의 == 연산자 만 호출됩니다. 동적으로 바인드 된 객체를 전혀 비교할 수 있습니까?
/*
* Parent.h
*/
class Parent{
public:
virtual ~Parent(){};
virtual void someFunction() = 0;
};
/*
* Child.h
*/
class Child : public Base{
private:
short value;
public:
Child(short value);
virtual ~Child();
bool operator==(const Child &other) const;
void someFunction();
};
/*
* Child.cpp
*/
#include "Child.h"
Child::Child(short value):value(value){}
Child::~Child() {}
void Child::someFunction(){...}
bool Child::operator==(const Child &other) const {
if(this->value==other.value){
return true;
}
return false;
}
/*
* Some Method
*/
std::shared_ptr<Parent> someObject(new Child(3));
std::shared_ptr<Parent> anotherObject(new Child(4));
//!!!calls == operator for shared_ptr, but not for Child
if(someObject==anotherObject){
//do sth
}
여기에 입력 해 주셔서 감사합니다! 고맙습니다. 정적으로 알려진 유형 (그리고 그것이) Parent
경우
최저
,
일반적으로 다형성 클래스를 비교하지 마십시오. 사실, 한 번에 하나 이상의 다형성 객체를 사용하여 아무것도 수행하지 마십시오. –