logging in or signing up OperatorOverloading Garrick Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 385 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: December 30, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... By: gopal.nanda1981 (21 month(s) ago) i want to download this ppt so plz give me perimission ro download Saving..... Post Reply Close Saving..... Edit Comment Close By: deeptikalra (26 month(s) ago) can i downl;oad this ppt, if u permit? Saving..... Post Reply Close Saving..... Edit Comment Close By: nani22 (43 month(s) ago) where is my comment? Saving..... Post Reply Close Saving..... Edit Comment Close By: nani22 (43 month(s) ago) thank you very much for the presentation. But please i need to download the PPT version of it. would you please tell me how to do that? Saving..... Post Reply Close Saving..... Edit Comment Close Premium member Presentation Transcript CS-240: CS-240 Operator Overloading Dick Steflik Operator Overloading: Operator Overloading What is it? assigning a new meaning to a specific operator when used in the context of a specific class ex. << is normally the shift left operator; but when used in conjunction with the class iostream it becomes the operator insertion; this is because the writers of the iostream class overloaded << to be insertion cout << “some string” << endl; remember cout is a predefined object of class iostream in another class, << could be overloaded to mean something.Operator Overloading: Operator Overloading Why do we do it? the c++ developers felt that it made more sense to overload an operator than to come up with some name for a function than meant the same thing as the operator. using an overloaded operator takes fewer keystrokes many people feel that an overloaded operator is more self documenting Operator Overloading: Operator Overloading Three basic ways: as a free function (not part of a class) as a member function as a friend functionOperator Overloading: Operator Overloading class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); bool operator == (const Rational & rhs); int getNumer() const { return numer; } int getDenom() const { return denom; } private: int numer; int denom; }Overloading = as a member: Overloading = as a member const Rational & Rational :: operator = (const Rational & rhs) { if (this != &rhs) { numer = rhs.numer; denom = rhs.denom; } return *this } Rational r1 , r2; r1 = r2; -note: the if statement catches the special case where someone is trying r1=r1, the if statement makes the code fasterOverloading + as a member: Overloading + as a member const Rational Rational::operator + (const Rational & rhs) { Rational answer ( *this); // initialize the answer with the current object answer += rhs; // add the second operand (assumes += has been overloaded) return answer; // return the answer via the copy constructor }Overloading == as a free function : Overloading == as a free function // not defined in the Rational class bool operator == (const & Rational lhs , const & Rational rhs) { return (lhs.getDenom() * rhs.getNumer() == lhs.getNumer() * rhs.getDenom()); } Rational r1 , r2; if ( r1 == r2 ) cout……… else coutOverloading == as a member: Overloading == as a member const bool Rational::operator == (const Rational & rhs ) { return ( numer * rhs.denom == denom * rhs.numer); } Rational r1 , r2 ; if (r1 == r2 ) cout ……. else cout ……Friend Functions: Friend Functions not a member function has access to private data member functions work with the current (named object) friend functions work with multiple objects of the same class tag as a friend of the class as part of class definition identify, by prototype, each friend of the classFriend Functions (cont.): Friend Functions (cont.) Friend functions are needed in C++ due to C++’s flawed object model, Java has a better model (all objects are derived from a single object). define the prototype in the public section of the class definition precede the prototype with the keyword “friend”Friend Functions (more): Friend Functions (more) define the friend implementation in the .cpp file with the member functions do not precede the function name with the class name and the scoping operator (ex. classname::)Overloading == as a friend: Overloading == as a friend class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); friend bool operator == (const Rational & lhs , const Rational & rhs); private: int numer; int denom; } bool operator == (const Rational & lhs , const Rational & rhs) { return ( lhs.numer * rhs.denom == lhs.denom * rhs.numer); } Overloading << as a friend: Overloading << as a friend class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); friend ostream & operator << (ostream & ostr , const Rational * rhs); private: int numer; int denom; } ostream & operator << (ostream & ostr , const Rational * rhs) { ostr << “numerator = “ << rhs.numer << “ denominator = “ << rhs.denom; } More Overloading Thoughts: More Overloading Thoughts = overload as a member function == != <= >= < > overload as a member >> << (insertion and extraction) overload as non-members (friends) returning type iostream +-*/% (arithmetics) overload as members += -= ... overload same as + and - Please note:: Please note: The only operators that cannot be overloaded are . (dot operator) .* (pointer-to-member) sizeof ?: (three operands)Slide17: Only existing operators can be overloaded. new operators cannot be created (have to be made a named function member) You do not have the permission to view this presentation. In order to view it, please contact the author of the presentation.
OperatorOverloading Garrick Download Post to : URL : Related Presentations : Share Add to Flag Embed Email Send to Blogs and Networks Add to Channel Uploaded from authorPOINTLite Insert YouTube videos in PowerPont slides with aS Desktop Copy embed code: (To copy code, click on the text box) Embed: URL: Thumbnail: WordPress Embed Customize Embed The presentation is successfully added In Your Favorites. Views: 385 Category: Entertainment License: All Rights Reserved Like it (0) Dislike it (0) Added: December 30, 2007 This Presentation is Public Favorites: 0 Presentation Description No description available. Comments Posting comment... By: gopal.nanda1981 (21 month(s) ago) i want to download this ppt so plz give me perimission ro download Saving..... Post Reply Close Saving..... Edit Comment Close By: deeptikalra (26 month(s) ago) can i downl;oad this ppt, if u permit? Saving..... Post Reply Close Saving..... Edit Comment Close By: nani22 (43 month(s) ago) where is my comment? Saving..... Post Reply Close Saving..... Edit Comment Close By: nani22 (43 month(s) ago) thank you very much for the presentation. But please i need to download the PPT version of it. would you please tell me how to do that? Saving..... Post Reply Close Saving..... Edit Comment Close Premium member Presentation Transcript CS-240: CS-240 Operator Overloading Dick Steflik Operator Overloading: Operator Overloading What is it? assigning a new meaning to a specific operator when used in the context of a specific class ex. << is normally the shift left operator; but when used in conjunction with the class iostream it becomes the operator insertion; this is because the writers of the iostream class overloaded << to be insertion cout << “some string” << endl; remember cout is a predefined object of class iostream in another class, << could be overloaded to mean something.Operator Overloading: Operator Overloading Why do we do it? the c++ developers felt that it made more sense to overload an operator than to come up with some name for a function than meant the same thing as the operator. using an overloaded operator takes fewer keystrokes many people feel that an overloaded operator is more self documenting Operator Overloading: Operator Overloading Three basic ways: as a free function (not part of a class) as a member function as a friend functionOperator Overloading: Operator Overloading class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); bool operator == (const Rational & rhs); int getNumer() const { return numer; } int getDenom() const { return denom; } private: int numer; int denom; }Overloading = as a member: Overloading = as a member const Rational & Rational :: operator = (const Rational & rhs) { if (this != &rhs) { numer = rhs.numer; denom = rhs.denom; } return *this } Rational r1 , r2; r1 = r2; -note: the if statement catches the special case where someone is trying r1=r1, the if statement makes the code fasterOverloading + as a member: Overloading + as a member const Rational Rational::operator + (const Rational & rhs) { Rational answer ( *this); // initialize the answer with the current object answer += rhs; // add the second operand (assumes += has been overloaded) return answer; // return the answer via the copy constructor }Overloading == as a free function : Overloading == as a free function // not defined in the Rational class bool operator == (const & Rational lhs , const & Rational rhs) { return (lhs.getDenom() * rhs.getNumer() == lhs.getNumer() * rhs.getDenom()); } Rational r1 , r2; if ( r1 == r2 ) cout……… else coutOverloading == as a member: Overloading == as a member const bool Rational::operator == (const Rational & rhs ) { return ( numer * rhs.denom == denom * rhs.numer); } Rational r1 , r2 ; if (r1 == r2 ) cout ……. else cout ……Friend Functions: Friend Functions not a member function has access to private data member functions work with the current (named object) friend functions work with multiple objects of the same class tag as a friend of the class as part of class definition identify, by prototype, each friend of the classFriend Functions (cont.): Friend Functions (cont.) Friend functions are needed in C++ due to C++’s flawed object model, Java has a better model (all objects are derived from a single object). define the prototype in the public section of the class definition precede the prototype with the keyword “friend”Friend Functions (more): Friend Functions (more) define the friend implementation in the .cpp file with the member functions do not precede the function name with the class name and the scoping operator (ex. classname::)Overloading == as a friend: Overloading == as a friend class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); friend bool operator == (const Rational & lhs , const Rational & rhs); private: int numer; int denom; } bool operator == (const Rational & lhs , const Rational & rhs) { return ( lhs.numer * rhs.denom == lhs.denom * rhs.numer); } Overloading << as a friend: Overloading << as a friend class Rational { Rational (int , int); const Rational & operator = (const Rational & rhs); const Rational & operator + (const Rational & rhs); friend ostream & operator << (ostream & ostr , const Rational * rhs); private: int numer; int denom; } ostream & operator << (ostream & ostr , const Rational * rhs) { ostr << “numerator = “ << rhs.numer << “ denominator = “ << rhs.denom; } More Overloading Thoughts: More Overloading Thoughts = overload as a member function == != <= >= < > overload as a member >> << (insertion and extraction) overload as non-members (friends) returning type iostream +-*/% (arithmetics) overload as members += -= ... overload same as + and - Please note:: Please note: The only operators that cannot be overloaded are . (dot operator) .* (pointer-to-member) sizeof ?: (three operands)Slide17: Only existing operators can be overloaded. new operators cannot be created (have to be made a named function member)