私はファーストクラスを持っています。私は別のクラスを持っており、これらのクラスのオブジェクトを持つベクトルを作成し、値でソートしたいと考えています。
class Class1
{
public:
Class1();
double getVal();
bool operator<(Class1& A) { return getVal() > A.getVal(); }
virtual ~Class1();
}
そしてこのクラスから私は2つのクラスを導出する。
class Class2 : virtual public Class1
{
protected:
int val1;
public:
int getVal(){ return val; }
bool operator<(Class1& A) { return getVal() > A.getVal(); }
}
2番目のクラスです。
class Class3 : virtual public Class1
{
protected:
double val2;
public:
double getVal(){ return val; }
bool operator<(Class1& A) { return getVal() > A.getVal(); }
}
最後にこれらのクラスから、私は1つのクラスを派生します。
void main(){
vector<Class1*> vec;
vec.push_back(new Class2(3));
vec.push_back(new Class3(5));
vec.push_back(new Class4(2));
sort(vec.begin(),vec.end());
}
コードだけで罰金ベクトル内のオブジェクトを押し戻しているが、私はそれをソートするためにしようとしているとき、何も起こりません:
class Class4 : public Class2, public Class3
{
protected:
char* info;
public:
double getVal(){ return val1+val2; }
bool operator<(Class1& A) { return getVal() > A.getVal(); }
}
は、メインに私が持っています。 親クラス(Class1)と主にgetVal()メソッドに問題があると思われますが、何をすべきかわかりません。 質問は:どのように私はこのベクトルをソートできますか?
*しかし、私がそれをソートしようとしているときに何も起こらない* - 事が*起こっている*。 'std :: sort'はあなたが書いたものを正確に実行しています。これはポインタの値をソートすることです。 – PaulMcKenzie
あなたのメソッドは 'const'(そしてconst参照を取ることができます)です。 – Jarod42
派生クラスで 'getVal()'を非表示にすることを意図していますか?他の名前を使う方が良いようです。 (または、仮想ゲッターが必要な場合は、同じ型を返すべきです( 'int'と' double'は共変型ではありません))。 – Jarod42