10

2つのことを比較できる汎用ラッパーをC++で実装しようとしています。私はそれを次のように行いました:

template <class T>
class GameNode {
    public:
        //constructor
        GameNode( T value )
            : myValue( value )
        { }

        //return this node's value
        T getValue() {
            return myValue;
        }

        //ABSTRACT
        //overload greater than operator for comparison of GameNodes
        virtual bool operator>( const GameNode<T> other ) = 0;

        //ABSTRACT
        //overload less than operator for comparison of GameNodes
        virtual bool operator<( const GameNode<T> other ) = 0;

    private:
        //value to hold in this node
        T myValue;
};

このように'<'および'>'演算子をオーバーロードできないように思われるので、これを回避するために何ができるのか疑問に思っています。

4

2 に答える 2

33

演算子関数は、コピーによって引数を受け入れています。ただし、純粋仮想関数のため、GameNodeの新しいインスタンスを構築することはできません。代わりに、参照によってこれらの引数を受け入れたいと思うかもしれません。

于 2012-10-01T02:53:55.080 に答える
6

抽象型はポリモーフィックであるためにのみ有用であり、実際にはポリモーフィックに使用する必要があります(これは仮想仮想と純粋仮想別名抽象の違いです)。

ポリモーフィズムには、参照またはポインターが必要です。この場合、参照が必要です。

値渡しは、引数をコピーして新しいオブジェクトを作成しようとしますが、抽象型のインスタンスを作成することはできません。参照による受け渡しは、新しいインスタンスを作成する代わりに既存のインスタンスを使用し、この問題を回避します。

于 2012-10-01T02:53:14.237 に答える