Way 1:
prev | next
Cheers and try hosting at Linode.
class Rational { public: Rational(int numerator = 0, // ctor is deliberately not explicit; int denominator = 1); // allows implicit int-to-Rational conversions int numerator() const; // accessors for numerator and int denominator() const; // denominator const Rational operator*(const Rational& rhs) const; private: ... }; Rational oneEighth(1, 8); Rational oneHalf(1, 2); result = oneHalf * 2; // fine - oneHalf.operator*(2); result = 2 * oneHalf; // error! - 2.operator*(oneHalf);Way2:
class Rational { ... // contains no operator* }; const Rational operator*(const Rational& lhs, // now a non-member const Rational& rhs) // function { return Rational(lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator()); } Rational oneFourth(1, 4); Rational result; result = oneFourth * 2; // fine result = 2 * oneFourth; // hooray, it works!Result: As multiplication should be commutative, Way2 should be used when type conversions should apply to all parameters.
prev | next
Cheers and try hosting at Linode.
No comments:
Post a Comment