I'm trying to create some overloaded arithmetic operators which use inherited classes like this:
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());
}
But I get following: error: conversion from 'Add*' to non-scalar type 'Block' requested
This is my first experience with OOP in C++ so is my idea even possible?
 
     
     
    