[go: up one dir, main page]

0% found this document useful (0 votes)
2 views40 pages

Unit 5 - Overloading and Templates

Chapter 5 covers overloading and templates in C++. It explains operator overloading, its restrictions, the use of the 'this' pointer, and friend functions, as well as how to create function and class templates. The chapter emphasizes that operator overloading allows user-defined types to use the same concise notation as built-in types.

Uploaded by

D3ath L3g3nd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views40 pages

Unit 5 - Overloading and Templates

Chapter 5 covers overloading and templates in C++. It explains operator overloading, its restrictions, the use of the 'this' pointer, and friend functions, as well as how to create function and class templates. The chapter emphasizes that operator overloading allows user-defined types to use the same concise notation as built-in types.

Uploaded by

D3ath L3g3nd
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 40

Chapter 5:

Overloading and Templates


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, Sixth Edition 2


Objectives (cont’d.)
• In this chapter, you will (cont’d.)
– Explore the members and nonmembers of a class
– Overload various operators
– Learn about templates
– Construct function templates and class templates

C++ Programming: Program Design Including Data Structures, Sixth Edition 3


Introduction
• Templates: enable you to write generic code for
related functions and classes
• Function templates: used to simplify function
overloading

C++ Programming: Program Design Including Data Structures, Sixth Edition 4


Why Operator Overloading Is
Needed
• Consider the following statements:

• Which of the following would you prefer?

C++ Programming: Program Design Including Data Structures, Sixth Edition 5


Why Operator Overloading Is
Needed (cont’d.)
• Assignment and member selection are the only built-
in operations on classes
• Other operators cannot be applied directly to class objects
• Operator overloading: extends definition of an
operator to work with a user-defined data type
• C++ allows you to extend the definitions of most of the
operators to work with classes

C++ Programming: Program Design Including Data Structures, Sixth Edition 6


Operator Overloading
• Most existing C++ operators can be overloaded to
manipulate class objects
• Cannot create new operators
• Operator function: overloads an operator
– Use reserved word operator as the function name

C++ Programming: Program Design Including Data Structures, Sixth Edition 7


Syntax for Operator Functions
• Syntax of an operator function heading:

– It is a value-returning function
– operator is a reserved word
• To overload an operator for a class:
– Include operator function declaration in the class
definition
– Write the definition of the operator function

C++ Programming: Program Design Including Data Structures, Sixth Edition 8


Overloading an Operator: Some
Restrictions
• Cannot change precedence or associativity
• Default parameters cannot be used
• Cannot change number of parameters
• Cannot create new operators
• Cannot overload: . .* :: ?: sizeof
• How the 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, Sixth Edition 9


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, Sixth Edition 10


Friend Functions of Classes
• Friend function (of a class): a nonmember function of
the class that has access to all the members of the
class
• Use the reserved word friend in the function
prototype in the class definition

C++ Programming: Program Design Including Data Structures, Sixth Edition 11


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, Sixth Edition 12


Operator Functions as Member
and Nonmember Functions
• To overload (), [], ->, or = for a class, the 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, Sixth Edition 13


Overloading Binary Operators
• If # represents a binary operator (e.g., + or ==) that
is to be overloaded for rectangleType
– It can be overloaded as either a member function of the
class or as a friend function

C++ Programming: Program Design Including Data Structures, Sixth Edition 14


Overloading the Binary Operators
as Member Functions
• Function prototype (included in the class definition):

• Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 15


Overloading the Arithmetic or
Relational Operators
• Function prototype (included in class definition):

• Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 16


Overloading the Stream Insertion
(<<) and Extraction (>>) Operators
• Consider the expression:
cout << myRectangle;
– Leftmost operand is an ostream object, not a
rectangleType object
• Thus, the operator function that overloads << for
rectangleType must be a nonmember function
of the class
– Same applies to the function that overloads >>

C++ Programming: Program Design Including Data Structures, Sixth Edition 17


Overloading the
Stream Insertion Operator (<<)
• Function prototype:

• Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 18


Overloading the Stream Extraction
Operator (>>)
• Function prototype:

• Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 19


Overloading the Assignment
Operator (=)
• Function prototype:

• Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 20


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., a friend
function), it has one parameter

C++ Programming: Program Design Including Data Structures, Sixth Edition 21


Overloading the Increment (++)
and Decrement (--) Operators
• General syntax to overload the pre-increment
operator ++ as a member function
– Function prototype:

– Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 22


Overloading the Increment (++) and
Decrement (--) Operators (cont’d.)
• General syntax to overload the pre-increment
operator ++ as a nonmember function:
– Function prototype:

– Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 23


Overloading the Increment (++) and
Decrement (--) Operators (cont’d.)
• General syntax to overload the post-increment
operator ++ as a member function:
– Function prototype:

– Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 24


Overloading the Increment (++) and
Decrement (--) Operators (cont’d.)
• Syntax to overload the post-increment operator ++ as
a nonmember function:
– Function prototype:

– Function definition:

C++ Programming: Program Design Including Data Structures, Sixth Edition 25


Operator Overloading:
Member Versus Nonmember
• Some operators must be overloaded as member
functions and some must be overloaded as
nonmember (friend) functions
• Binary arithmetic operator + can be overloaded
either way
– 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, Sixth Edition 26


Operator Overloading:
Member Versus Nonmember (cont’d.)
• Overload + as a nonmember function
– Must pass both objects as parameters
– Code may be somewhat clearer this way

C++ Programming: Program Design Including Data Structures, Sixth Edition 27


Classes and Pointer Member
Variables (Revisited)
• Recall that assignment operator copies member
variables from one object to another of the same
type
– Does not work well with pointer member variables
• 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, Sixth Edition 28


Operator Overloading:
One Final Word
• If an operator op is overloaded for a class, e.g.,
rectangleType
– When you 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, Sixth Edition 29


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, Sixth Edition 30


Function Overloading
• Overloading a function: several functions with the
same name, but different parameters
– Parameter list determines which function will execute
– Must provide the definition of each function

C++ Programming: Program Design Including Data Structures, Sixth Edition 31


Templates
• Template: a single code body for a set of related
functions (function template) and related classes
(class template)
• Syntax:

– Type is the data type


– Declaration is either a function declaration or a class
declaration

C++ Programming: Program Design Including Data Structures, Sixth Edition 32


Templates (cont’d.)
• class in the heading refers to any user-defined
type or built-in type
• Type: 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, Sixth Edition 33


Function Templates
• Syntax of the function template:

• Type is a formal parameter of the template used to:


– Specify type of parameters to the function
– Specify return type of the function
– Declare variables within the function

C++ Programming: Program Design Including Data Structures, Sixth Edition 34


Class Templates
• Class template: a single code segment for 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 to be function templates

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


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, Sixth Edition 36


Header File and Implementation
File of a Class Template (cont’d.)
• Another alternative: put class definition and function
definitions in separate files
– Include directive to implementation file at the end of
header file
• In either case, function definitions and client code
are compiled together

C++ Programming: Program Design Including Data Structures, Sixth Edition 37


Summary
• An operator that has different meanings with
different data types is said to be overloaded
• Operator function: a function that overloads an
operator
− 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, Sixth Edition 38


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, Sixth Edition 39


Summary (cont’d.)
• Classes with pointer variables must overload the
assignment operator, and include both a copy
constructor and deconstructor
• 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
• Are called parameterized types

C++ Programming: Program Design Including Data Structures, Sixth Edition 40

You might also like