純粋仮想メソッドを持つ抽象基本クラス「親」と、このメソッドとメンバー「値」を実装する子クラス「子」を取得しました。動的バインディングの手段として、子クラスのオブジェクトを shared_ptr としてインスタンス化します。これらのオブジェクトを std::vector に格納するため、ここでは参照の代わりに shared_ptr を使用します。
ここで、ソース コードの下部に定義されている 2 つのオブジェクト "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
}
ここでの入力に感謝します!ありがとうございました。
一番、