Chapter 14: Overloading and Templates C++ Programming: Program Design Including Data Structures, Fifth Edition.

Slides:



Advertisements
Similar presentations
Chapter 11 Operator Overloading; String and Array Objects Chapter 11 Operator Overloading; String and Array Objects Part I.
Advertisements

C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 7: User-Defined Functions II.
Chapter 7: User-Defined Functions II
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 7: User-Defined Functions II.
Chapter 7: User-Defined Functions II Instructor: Mohammad Mojaddam.
Class and Objects.
Rossella Lau Lecture 10, DCO10105, Semester B, DCO10105 Object-Oriented Programming and Design  Lecture 10: Operator overload  Operator overload.
 2006 Pearson Education, Inc. All rights reserved Operator Overloading.
Chapter 14: Overloading and Templates
Operator Overloading in C++ Systems Programming. Systems Programming: Operator Overloading 22   Fundamentals of Operator Overloading   Restrictions.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 7: User-Defined Functions II.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 6: User-Defined Functions I.
Classes: A Deeper Look Systems Programming.
Chapter 6: User-Defined Functions I
Chapter 13: Overloading.
Chapter 15: Operator Overloading
Operator OverloadingCS-2303, C-Term Operator Overloading CS-2303 System Programming Concepts (Slides include materials from The C Programming Language,
Operator overloading Object Oriented Programming.
Operator Overloading in C++
Data Structures Using C++1 Chapter 2 Object-Oriented Design (OOD) and C++
Review of C++ Programming Part II Sheng-Fang Huang.
Data Structures Using C++1 Chapter 2 Object-Oriented Design (OOD) and C++
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 14: Overloading and Templates.
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Chapter 12: Adding Functionality to Your Classes.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 15: Overloading and Templates.
Overloading Operators. Operators  Operators are functions, but with a different kind of name – a symbol.  Functions.
Data Structures Using C++ 2E Chapter 3 Pointers and Array-Based Lists.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 14: Pointers, Classes, Virtual Functions, and Abstract Classes.
Chapter 11: Inheritance and Composition. Objectives In this chapter, you will: – Learn about inheritance – Learn about derived and base classes – Redefine.
Chapter 6: User-Defined Functions I Instructor: Mohammad Mojaddam
Chapter 6: User-Defined Functions
C++ Programming: From Problem Analysis to Program Design, Fifth Edition, Fifth Edition Chapter 7: User-Defined Functions II.
Overloading Binary Operators Two ways to overload –As a member function of a class –As a friend function As member functions –General syntax Data Structures.
Data Structures Using C++ 2E Chapter 3 Pointers. Data Structures Using C++ 2E2 Objectives Learn about the pointer data type and pointer variables Explore.
Pointer and Array Lists Chapter 3, Summary CS 244 Brent M. Dingle, Ph.D. Game Design and Development Program Department of Mathematics, Statistics, and.
Data Structures Using C++ 2E1 Inheritance An “is-a” relationship –Example: “every employee is a person” Allows new class creation from existing classes.
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes.
Operator overloading and type convesions BCAS,Bapatla B.mohini devi.
 Classes in c++ Presentation Topic  A collection of objects with same properties and functions is known as class. A class is used to define the characteristics.
CPSC 252 Operator Overloading and Convert Constructors Page 1 Operator overloading We would like to assign an element to a vector or retrieve an element.
Operator Overloading. Introduction It is one of the important features of C++ language  Compile time polymorphism. Using overloading feature, we can.
 2008 Pearson Education, Inc. All rights reserved Operator Overloading.
Chapter 10: Classes and Data Abstraction. Objectives In this chapter, you will: Learn about classes Learn about private, protected, and public members.
CONSTRUCTOR AND DESTRUCTORS
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 15: Overloading and Templates.
Department of Computer Science Data Structures Using C++ 2E Chapter 2 Object-Oriented Design (OOD) and C++  Learn about inheritance  Learn about derived.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 6: User-Defined Functions I.
Chapter 13: Overloading and Templates. Objectives In this chapter, you will – Learn about overloading – Become familiar with the restrictions on operator.
Functions Math library functions Function definition Function invocation Argument passing Scope of an variable Programming 1 DCT 1033.
AL-HUSEEN BIN TALAL UNIVERSITY College of Engineering Department of Computer Engineering Object-Oriented Programming Course No.: Fall 2014 Overloading.
Chapter 3: User-Defined Functions I
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 6: User-Defined Functions I.
Chapter 11: Inheritance and Composition. Introduction Two common ways to relate two classes in a meaningful way are: – Inheritance (“is-a” relationship)
Chapter 10: Classes and Data Abstraction. Classes Object-oriented design (OOD): a problem solving methodology Objects: components of a solution Class:
Chapter 12: Pointers, Classes, Virtual Functions, Abstract Classes, and Lists.
CSE1002 – Problem Solving with Object Oriented Programming
TK1924 Program Design & Problem Solving Session 2011/2012
Chapter 13: Overloading and Templates
Chapter 7: User-Defined Functions II
Chapter 13: Pointers, Classes, Virtual Functions, and Abstract Classes
Object-Oriented Design (OOD) and C++
Chapter 15: Overloading and Templates
Chapter 12: Pointers, Classes, Virtual Functions, and Abstract Classes
Operator Overloading Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Chapter 11: Inheritance and Composition
More C++ Classes Systems Programming.
Presentation transcript:

Chapter 14: Overloading and Templates C++ Programming: Program Design Including Data Structures, Fifth Edition

Objectives In this chapter, you will: Learn about overloading Become aware of the restrictions on operator overloading Examine the pointer this Learn about friend functions C++ Programming: Program Design Including Data Structures, Fifth Edition 2

Objectives (cont'd.) Explore the members and nonmembers of a class Discover how to overload various operators Learn about templates Explore how to construct function templates and class templates C++ Programming: Program Design Including Data Structures, Fifth Edition 3

Why Operator Overloading Is Needed Consider the following statements: Which of the following would you prefer? C++ Programming: Program Design Including Data Structures, Fifth Edition 4

Why Operator Overloading is Needed (cont'd.) Operator overloading: extend definition of an operator to work with a user-defined data type The only built-in operations on classes are assignment and member selection Other operators cannot be applied directly to class objects C++ allows you to extend the definitions of most of the operators to work with classes C++ Programming: Program Design Including Data Structures, Fifth Edition 5

Operator Overloading Can overload most C++ operators Cannot create new operators Most existing operators can be overloaded to manipulate class objects Write an operator function to overload an operator –Use reserved word operator –Example: write a function called: operator>= C++ Programming: Program Design Including Data Structures, Fifth Edition 6

Syntax for Operator Functions The syntax of an operator function heading: –The operator function is value-returning – operator is a reserved word To overload an operator for a class: –Include operator function in the class definition –Write the definition of the operator function C++ Programming: Program Design Including Data Structures, Fifth Edition 7

Overloading an Operator: Some Restrictions Cannot change precedence or associativity Default arguments cannot be used Cannot change number of arguments Cannot create new operators Cannot overload:..* :: ?: sizeof How operator works with built-in types remains the same –Can overload for user-defined objects or for a combination of user-defined and built-in objects C++ Programming: Program Design Including Data Structures, Fifth Edition 8

Pointer this Every object of a class maintains a (hidden) pointer to itself called this When an object invokes a member function – this is referenced by the member function C++ Programming: Program Design Including Data Structures, Fifth Edition 9

Friend Functions of Classes Friend function (of a class): nonmember function of the class that has access to all the members of the class To make a function friend to a class –Reserved word friend precedes the function prototype in the class definition C++ Programming: Program Design Including Data Structures, Fifth Edition 10

Definition of a friend Function " friend " doesn’t appear in function definition When writing the friend function definition –The name of the class and the scope resolution operator are not used C++ Programming: Program Design Including Data Structures, Fifth Edition 11

Operator Functions as Member Functions and Nonmember Functions To overload (), [], ->, or = for a class, function must be a member of the class If op is overloaded for opOverClass : –If the leftmost operand of op is an object of a different type, the overloading function must be a nonmember (friend) of the class –If the overloading function for op is a member of opOverClass, then when applying op on objects of type opOverClass, the leftmost operand must be of type opOverClass C++ Programming: Program Design Including Data Structures, Fifth Edition 12

C++ Programming: Program Design Including Data Structures, Fifth Edition 13 Operator Functions as Member Functions and Nonmember Functions (cont’d.)

C++ Programming: Program Design Including Data Structures, Fifth Edition 14 Operator Functions as Member Functions and Nonmember Functions (cont’d.)

Overloading Binary Operators If # represents a binary operator (e.g., + or == ) that is to be overloaded for rectangleType –Operator can be overloaded as either a member function of the class or as a friend function C++ Programming: Program Design Including Data Structures, Fifth Edition 15

Overloading the Binary Operators as Member Functions C++ Programming: Program Design Including Data Structures, Fifth Edition 16

Overloading the Binary Operators (Arithmetic or Relational) as Nonmember Functions C++ Programming: Program Design Including Data Structures, Fifth Edition 17

Overloading the Stream Insertion ( > ) Operators Consider the expression: cout << myRectangle; The leftmost operand of << is an ostream object, not an object of type rectangleType –Thus, the operator function that overloads << for rectangleType must be a nonmember function of the class The same applies to the function that overloads >> C++ Programming: Program Design Including Data Structures, Fifth Edition 18

Overloading the Stream Insertion Operator ( << ) C++ Programming: Program Design Including Data Structures, Fifth Edition 19

Overloading the Stream Extraction Operator ( >> ) C++ Programming: Program Design Including Data Structures, Fifth Edition 20

Overloading the Assignment Operator ( = ) C++ Programming: Program Design Including Data Structures, Fifth Edition 21

Overloading Unary Operators To overload a unary operator for a class: –If the operator function is a member of the class, it has no parameters –If the operator function is a nonmember (i.e., it is a friend function), it has one parameter C++ Programming: Program Design Including Data Structures, Fifth Edition 22

Overloading the Increment ( ++) and Decrement ( --) Operators General syntax to overload the pre- increment operator ++ as a member function: C++ Programming: Program Design Including Data Structures, Fifth Edition 23

Overloading the Increment ( ++) and Decrement ( --) Operators (cont'd.) General syntax to overload the pre- increment operator ++ as a nonmember function: C++ Programming: Program Design Including Data Structures, Fifth Edition 24

Overloading the Increment ( ++) and Decrement ( --) Operators (cont'd.) General syntax to overload the post-increment operator ++ as a member function: C++ Programming: Program Design Including Data Structures, Fifth Edition 25

Overloading the Increment ( ++) and Decrement ( --) Operators (cont'd.) Syntax to overload the post-increment operator ++ as a nonmember function: C++ Programming: Program Design Including Data Structures, Fifth Edition 26

Operator Overloading: Member versus Nonmember Certain operators must be overloaded as member functions and some must be overloaded as nonmember (friend) functions The binary arithmetic operator + can be overloaded either way Overload + as a member function –Operator + has direct access to data members of one of the objects –Need to pass only one object as a parameter C++ Programming: Program Design Including Data Structures, Fifth Edition 27

Operator Overloading: Member versus Nonmember (cont'd.) Overload + as a nonmember function –Must pass both objects as parameters –Could require additional memory and time to make a local copy of the data For efficiency purposes, overload operators as member functions C++ Programming: Program Design Including Data Structures, Fifth Edition 28

Classes and Pointer Member Variables (Revisited) Classes with pointer member variables must: –Explicitly overload the assignment operator –Include the copy constructor –Include the destructor C++ Programming: Program Design Including Data Structures, Fifth Edition 29

Operator Overloading: One Final Word Suppose that an operator op is overloaded for a class—say, rectangleType –Whenever we use op on objects of type rectangleType, the body of the function that overloads the operator op for the class rectangleType executes –Therefore, whatever code you put in the body of the function executes C++ Programming: Program Design Including Data Structures, Fifth Edition 30

Programming Example: Complex Numbers Complex number: number of the form a + ib, in which i 2 = -1 and a and b are real numbers Addition and multiplication of complex numbers are defined by the following rules: –(a + ib) + (c + id) = (a + c) + i(b + d ) –(a + ib) * (c + id) = (ac - bd) + i(ad + bc) C++ has no built-in data type that allows us to manipulate complex numbers –Construct a data type, complexType, that can be used to process complex numbers C++ Programming: Program Design Including Data Structures, Fifth Edition 31

Programming Example: Complex Numbers (cont’d.) Overload –Stream insertion –Stream extraction –+ –* C++ Programming: Program Design Including Data Structures, Fifth Edition 32

C++ Programming: Program Design Including Data Structures, Fifth Edition 33 Programming Example: Complex Numbers (cont’d.)

C++ Programming: Program Design Including Data Structures, Fifth Edition 34 Programming Example: Complex Numbers (cont’d.)

C++ Programming: Program Design Including Data Structures, Fifth Edition 35

Programming Example: Complex Numbers (cont’d.) Output a complex number in the form: (a, b) –Output the left parenthesis, ( –Output the real part –Output the comma and a space –Output the imaginary part –Output the right parenthesis, ) C++ Programming: Program Design Including Data Structures, Fifth Edition 36

Programming Example: Complex Numbers (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition 37

Programming Example: Complex Numbers (cont’d.) The input is of the form: (3, 5) Read this complex number: –Read and discard the left parenthesis –Read and store the real part –Read and discard the comma –Read and store the imaginary part –Read and discard the right parenthesis C++ Programming: Program Design Including Data Structures, Fifth Edition 38

Programming Example: Complex Numbers (cont’d.) C++ Programming: Program Design Including Data Structures, Fifth Edition 39

Overloading the Array Index (Subscript) Operator ( [] ) Syntax to declare operator[] as a member of a class for nonconstant arrays: Syntax to declare operator[] as a member of a class for constant arrays: C++ Programming: Program Design Including Data Structures, Fifth Edition 40

Function Overloading Overloading a function: several functions with the same name, but different parameters –Parameter types determine which function will execute –Must provide the definition of each function C++ Programming: Program Design Including Data Structures, Fifth Edition 41

Templates Templates: a single code body for a set of related functions (called function template) and related classes (called class template) Syntax: where Type is the type of the data and declaration is either a function declaration or a class declaration C++ Programming: Program Design Including Data Structures, Fifth Edition 42

Templates (cont'd.) The word class in the heading refers to any user-defined type or built-in type Type is called a formal parameter to the template Just as variables are parameters to functions –Data types are parameters to templates C++ Programming: Program Design Including Data Structures, Fifth Edition 43

Function Templates The syntax of the function template is: where Type is called a formal parameter of the template Type –Specifies type of parameters to the function –Specifies return type of the function –Declares variables within the function C++ Programming: Program Design Including Data Structures, Fifth Edition 44

Class Templates Class templates: a single code segment represents a set of related classes –Called parameterized types Syntax: A template instantiation can be created with either a built-in or user-defined type The function members of a class template are considered function templates C++ Programming: Program Design Including Data Structures, Fifth Edition 45

Header File and Implementation File of a Class Template Passing a parameter to a function takes effect at run time Passing a parameter to a class template takes effect at compile time Cannot compile the implementation file independently of the client code –Can put class definition and definitions of the function templates directly in the client code –Can put class definition and the definitions of the function templates in the same header file C++ Programming: Program Design Including Data Structures, Fifth Edition 46

Header File and Implementation File of a Class Template (cont'd.) Another alternative: put class definition and function definitions in separate files –However, include directive to implementation file at the end of header file In either case, function definitions and client code are compiled together We will put the class definition and the function definitions in the same header file C++ Programming: Program Design Including Data Structures, Fifth Edition 47

Summary An operator that has different meanings with different data types is said to be overloaded Any function that overloads an operator is called an operator function operator is a reserved word Operator functions are value-returning Operator overloading provides the same concise notation for user-defined data types as for built-in data types C++ Programming: Program Design Including Data Structures, Fifth Edition 48

Summary (cont'd.) Only existing operators can be overloaded The pointer this refers to the object A friend function is a nonmember of a class If an operator function is a member of a class –The leftmost operand of the operator must be a class object (or a reference to a class object) of that operator’s class C++ Programming: Program Design Including Data Structures, Fifth Edition 49

Summary (cont'd.) Every instance of an overloaded function has different sets of parameters Templates: –Function template: a single code segment for a set of related functions –Class template: a single code segment for a set of related classes Called parameterized types C++ Programming: Program Design Including Data Structures, Fifth Edition 50