/** cin >> val; means that the method >> which is a member of the class specified by the left hand operand (in this case cin which is of type istream) is invoked with an actual parameter of the type of the right hand operand. a + b; means that the + method of the class associated with a is called with a parameter of type b ( a.add(b) ). In order to use the a + b notation, I must define a function for the class of a that excepts a parameter of type b. **/ #include class Myclass { private: int val; public: Myclass(int o = 0) {val = o;} ~Myclass() {}; Myclass add(Myclass a) { Myclass temp; temp.val = val + a.val; return(temp); } void output() {cout << val;} void input() {cin >> val;} Myclass operator + (Myclass a) { Myclass temp; temp.val = val + a.val; return(temp); } }; int main(void) { Myclass one, two; cout << 3 + 4; cout << "\nEnter an integer "; one.input(); cout << "\none = "; one.output(); two = one.add(one); cout << "\ntwo = "; two.output(); /** no operator "<<" matches these operands is the compiler error for the first line of code. Similar messages are given for the other 2. Since I want to be able to use these operators for my class instead of the more cumbersome one.add(), etc., I need some mechanism for defining the operators so that the operator (think function) has a version that uses the operands of the type I want. cout << one; cin >> two; two = one + one; **/ /** after adding the operator + method to class Myclass **/ two = one + one + one; cout << "\nNow two = "; two.output(); cout << endl << endl; return(0); }