次のような継承されたクラスを使用するオーバーロードされた算術演算子を作成しようとしています。
class Block {
public:
Block() {}
virtual double Value() {};
};
class Constant : public Block {
public:
Constant(double v) { value = v; }
virtual double Value() { return value; }
private:
double value;
};
class Add : public Block {
public:
Add(Block &a, Block &b) { value1 = &a; value2 = &b; }
virtual double Value() { return value1->Value() + value2->Value(); }
private:
Block *value1;
Block *value2;
};
Block operator + (Block &a, Block &b) {
return new Add(a, b);
}
int main() {
Constant a(5.0);
Constant b(6.0);
printf("%.3f", (a+b).Value());
}
しかし、私は次のようになります:error: conversion from 'Add*' to non-scalar type 'Block' requested
これはC++でのOOPの最初の経験ですが、私の考えは可能ですか?