guys, why MyInt is abstract? class INumber { public: virtual INumber & operator*(const INumber & other) const = 0; }; class MyInt : public INumber { public: MyInt(int value) : value(value) {} virtual MyInt mult(const INumber & other) const { const MyInt & other_tmp = (const MyInt &)other; return value + other_tmp.value; } int value; };