• No results found

Objectives

N/A
N/A
Protected

Academic year: 2020

Share "Objectives"

Copied!
50
0
0

Loading.... (view fulltext now)

Full text

(1)

Chapter 15: Operator Overloading

(2)

Objectives

In this chapter, you will:

• Learn about overloading

• Become aware of the restrictions on

operator overloading

• Examine the pointer this

(3)

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

(4)

Why Operator Overloading Is

Needed

• Consider the following statements:

(5)

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

(6)

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:

(7)

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

(8)

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

(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

(10)

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

(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

(12)

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

(13)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 13

Operator Functions as Member

Functions and Nonmember

(14)

Operator Functions as Member

Functions and Nonmember

(15)

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

(16)
(17)

Overloading the Binary Operators

(Arithmetic or Relational) as

Nonmember Functions

(18)

Overloading the Stream Insertion

(

<<

) and Extraction (

>>

) 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

(19)

Overloading the Stream Insertion

Operator (

<<

)

(20)
(21)

Overloading the Assignment

Operator (

=

)

(22)

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

(23)

Overloading the Increment (

++)

and Decrement (

--)

Operators

• General syntax to overload the

pre-increment operator ++ as a member

function:

(24)

Overloading the Increment (

++)

and Decrement (

--)

Operators

(cont'd.)

(25)

Overloading the Increment (

++)

and

Decrement (--) Operators (cont'd.)

• General syntax to overload the post-increment

operator ++ as a member function:

(26)

Overloading the Increment (

++)

and

Decrement (--) Operators (cont'd.)

(27)

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

(28)

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

(29)

Classes and Pointer Member

Variables (Revisited)

• Classes with pointer member variables

must:

– Explicitly overload the assignment operator

– Include the copy constructor

– Include the destructor

(30)

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

(31)

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

(32)

Programming Example: Complex

Numbers (cont’d.)

• Overload

– Stream insertion

– Stream extraction

– +

(33)

C++ Programming: From Problem Analysis to Program Design, Fifth Edition 33

(34)
(35)

Programming Example: Complex

Numbers (cont’d.)

(36)

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

(37)

Programming Example: Complex

Numbers (cont’d.)

(38)

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

(39)

Programming Example: Complex

Numbers (cont’d.)

(40)

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

(41)

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

(42)

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

(43)

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

(44)

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

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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

References

Related documents

The American section of the Comintern, the Communist Party of the USA (CPUSA), was the political home of many working-class radicals in the 1930s and was, at the direction of

• The compiler deduces the parameter types and generates a unique function specifically for each time the template function is called.. Template Functions (behind

An initial eff ort was made to compare the gene and repeat content of the tomato and potato genomes, based on the available BAC-end sequences for both species (Datema et al.,

Types are called collective nouns worksheet is determined by collection as a formula is just select goal seek dialog box button on general.. biology, which

You should understand the data definitions for lists, how the template mirrors the definition, and be able to use the template to write recursive functions consuming this type of

The species of Naupactus were recovered as different monophyletic groups, some of them closer to other genera of Naupactini ( Lanterius , Teratopactus , Pantomorus and..

LEADERSHIP SEMINAR: Foundations of Multi-cultural and Multi-ethnic Leadership The student will learn how to adapt their leadership style to changes in cultural and. ethnic contexts,