Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I)...

73
Zhigang Zhu, 2002- 2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    215
  • download

    0

Transcript of Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I)...

Page 1: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 1

CSC212 Data Structure - Section FG

CSC212 Data Structure - Section FG

Lecture 2

ADT and C++ Classes (I)

Instructor: Zhigang Zhu

Department of Computer Science

City College of New York

Page 2: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 2

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 3: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 3

Chapter 2 introduces Object Oriented Programming.

OOP is the typical approach to programming which supports the creation of new data types and operations to manipulate those types.

This lecture gives a review of C++ Classes and introduces ADTs.

Object Oriented ProgrammingObject Oriented Programming

Page 4: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 4

C++ Classes and ADTsC++ Classes and ADTs

Class Mechanism to create objects and member

functions Support information hiding

Abstract Date Types (ADTs) mathematical data type Class as an ADT that programmers can use

without knowing how the member functions are implemented - i.e. with information hiding

Page 5: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 5

A point ADTA point ADT

A data type to store and manipulate a single point on a plane

Manipulations Initialize Retrieval Shift

x

-2 -1 0 1 2

2

1

0

-1

- 2

y

p1

Page 6: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 6

A point ADTA point ADT

A data type to store and manipulate a single point on a plane

Manipulations Initialize Retrieval coordinates Shift

x

-2 -1 0 1 2

2

1

0

-1

- 2

y

p1

(-1, 0.8)

Page 7: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 7

A point ADTA point ADT

A data type to store and manipulate a single point on a plane

Manipulations Initialize Retrieval coordinates Shift

x

-2 -1 0 1 2

2

1

0

-1

- 2

y

0.8

-1.0

p1

Page 8: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 8

A point ADTA point ADT

A data type to store and manipulate a single point on a plane

Manipulations Initialize Retrieval coordinates Shift by

x

-2 -1 0 1 2

2

1

0

-1

- 2

y

(0.3, -0.6) (1.3, -1.4)

p2

p1

Page 9: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 9

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 10: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 10

point Definitionpoint Definition

We can implement the point object using a data type called a class.

class point {

. . .

};

Don’t forget the semicolon at the end

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 11: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 11

point Definitionpoint Definition

The class will have two components called x and y. These components are the x and y coordinates of this point.

Using a class permits two new features . . .

class point { . . . double x; double y; };

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 12: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 12

point Definitionpoint Definition

The two components will be private member variables. This ensures that nobody can directly access this information. The only access is through functions that we provide for the class.

class point { . . .private: double x; double y;};

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 13: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 13

point Definitionpoint Definition

In a class, the functions which manipulate the class are also listed.

class point {public: . . .private: double x; double y;};Prototypes for the point

functions go here,after the word public:

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 14: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 14

point Definitionpoint Definition

In a class, the functions which manipulate the class are also listed.

class point{public: . . .private: double x; double y;};

Prototypes for the point member functions go here

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 15: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 15

point Definitionpoint Definition

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x() const; double get_y( ) const;private: double x; double y;};

Our point has at least four member functions:

Functio

n bodie

s

will b

e el

sewher

e.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 16: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 16

point Definitionpoint Definition

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x( ) const; double get_y( ) const;private: double x; double y;};

The keyword const appears after two prototypes:

This means that thesefunctions will not changethe data stored in apoint ADT.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 17: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 17

Files for the point ADTFiles for the point ADT

The point class definition, which we have just seen, is placed with documentation in a file called point.h, outlined here.

The implementations of the four member functions will be placed in a separate file called point.cxx, which we will examine in a few minutes.

Documentation:(Preconditions and

Postconditions)

Class definition:•point class definition which we have already seen

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 18: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 18

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 19: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 19

Using the point ADTUsing the point ADT

A program that wants to use the point ADT must include the point.h header file (along with its other header inclusions).

File pointmain1.cxx

#include <iostream.h>#include <stdlib.h>#include “point.h"

...

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 20: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 20

Using the point ADTUsing the point ADT

Just for illustration, the example program will declare two point variables named p1 and p2.

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ){ point p1; point p2;

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 21: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 21

Using the point ADTUsing the point ADT

Just for illustration, the example program will declare two point objects named p1 and p2.

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1; point p2;

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 22: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 22

Using the point ADTUsing the point ADT

The program starts by calling the initialize member function for p1.

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 23: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 23

Using the point ADTUsing the point ADT

The program starts by activating the initialize member function for p1.

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1: point p2;

p1.initialize(-1.0, 0.8);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 24: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 24

Using the point ADTUsing the point ADT

The member function activation consists of four parts, starting with the object name.

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

Name of the object

Name of the object

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 25: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 25

Using the point ADTUsing the point ADT

The instance (object) name is followed by a period.

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

A P

erio

d

A P

erio

d

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 26: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 26

Using the point ADTUsing the point ADT

After the period is the name of the member function that you are activating.

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

Name of the Function

Name of the Function

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 27: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 27

Using the point ADTUsing the point ADT

Finally, the arguments for the member function. In this example the first argument (x coordinate) and the second argument (y coordinate)

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

Arg

umen

ts

Arg

umen

ts

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 28: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 28

A QuizA Quiz

How would you activate p1's get_x member function ?

What would be the output of p1's get_x member function at this point in the program ?

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 29: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 29

A QuizA Quiz

Notice that the get_x member function has no arguments.

At this point, activating p1.get_x

will return a double value-1.0.

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8);

cout << p1.get_x( ) <<endl;

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 30: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 30

A QuizA Quiz

Trace through this program, and tell me the complete output.

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8); cout << p1.get_x( ) << p1.get_y() << endl; p2.initialize(p1.get_x(), p1.get_y()); cout << p2.get_x( ) << p2.get_y() << endl; p2.shift(1.3, -1.4); cout << p2.get_x( ) << p2.get_y() << endl;

. . .

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 31: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 31

A QuizA Quiz

-1.0 0.8

-1.0 0.8

0.3 -0.6

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

int main( ) { point p1; point p2;

p1.initialize(-1.0, 0.8); cout << p1.get_x( ) << p1.get_y() << endl; p2.initialize(p1.get_x(), p1.get_y()); cout << p2.get_x( ) << p2.get_y() << endl; p2.shift(1.3, -1.4); cout << p2.get_x( ) << p2.get_y() << endl;

. . .

Page 32: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 32

What you know about ObjectsWhat you know about Objects

Class = Data + Member Functions. You know how to define a new class type, and place

the definition in a header file. You know how to use the header file in a program

which declares instances of the class type. You know how to activate member functions. But you still need to learn how to write the bodies of

a class’s member functions.

Page 33: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 33

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 34: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 34

point Implementationpoint Implementation

Remember that the member function’s bodies generally appear in a separate point.cxx file.

Functio

n bodie

s

will b

e in

.cxx

file

.

Functio

n bodie

s

will b

e in

.cxx

file

.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x( ) const; double get_y( ) const;private: double x; double y;};

Page 35: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 35

point Implementationpoint Implementation

We will look at the body of intialize, which must assign its two arguments to the two private member variables.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x( ) const; double get_y( ) const;private: double x; double y;};

Page 36: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 36

point Implementationpoint Implementation

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

For the most part, the function’s body is no different than any other function body.

But there are two special features about a member function’s body . . .

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 37: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 37

point Implementationpoint Implementation

In the heading, the function's name is preceded by the class name and :: - otherwise C++ won't realize this is a class’s member function.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

Page 38: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 38

point Implementationpoint Implementation

Within the body of the function, the class’s member variables and other member functions may all be accessed.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

Page 39: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 39

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

point Implementationpoint Implementation

Within the body of the function, the class’s member variables and other member functions may all be accessed.

But, whose member variables are

these? Are they

p1.x

p1.y

p2.x

p2.y ?

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 40: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 40

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

point Implementationpoint Implementation

Within the body of the function, the class’s member variables and other member functions may all be accessed.

If we activate

p1.initialize:

p1.x

p1.y

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 41: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 41

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

point Implementationpoint Implementation

Within the body of the function, the class’s member variables and other member functions may all be accessed.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

If we activate

p2.initialize:

p2.x

p2.y

Page 42: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 42

point Implementationpoint Implementation

double point::get_x() const {

return x;

}

Here is the implementation of the get_x member function, which return the x coordinate:

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 43: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 43

point Implementationpoint Implementation

Here is the implementation of the get_x member function, which return the x coordinate:

Notice how this member function implementation uses the member variable x of the point object.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

double point::get_x() const {

return x;

}

Page 44: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 44

point Implementationpoint Implementation

Member functions may activate other member functions

Notice this member function implementation still directly assign the member variables x and y.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

void point::origin() { x = 0.0; y = 0.0;}

Page 45: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 45

point Implementationpoint Implementation

Member functions may activate other member functions

Notice how this member function implementation uses the member function initialize.

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

void point::origin() { initialize(0.0, 0.0);} Without object name

Without object name

Page 46: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 46

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x( ) const; double get_y( ) const;private: double x; double y;};

A Common PatternA Common Pattern

Often, one or more member functions will place data in the member variables...

...so that other member functions may use that data.

Initialize & shift get_x & get_y

Page 47: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 47

Classes have member variables and member functions. An object is a variable where the data type is a class.

You should know how to declare a new class type, how to implement its member functions, how to use the class type.

Frequently, the member functions of an class type place information in the member variables, or use information that's already in the member variables.

Next we will see more features of OOP and classes.

Summary of classes Summary of classes

Page 48: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 48

Assignments Assignments

Reading: Chapter 2.3-2.5

Programming assignment 1 - Due Wed, Sep. 17 Need all of chapter 2 to finish, but you can start doing it

now Requirements and guidelines have been posted on the

course web site C++ Installation Guide online

Linux Users: See the assignment #1 guidelines Mac/Win Users: Check the course bulletin (by Wai Khoo)

Page 49: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 49

Break

Page 50: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 50

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 51: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 51

Constructors: point InitializationConstructors: point Initialization

The program starts by activating the initialize member function for p1.

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1: point p2;

p1.initialize(-1.0, 0.8);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

First improvement: automatic initialization without activating the initialize function

Page 52: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 52

Constructors: point InitializationConstructors: point Initialization

class point {public: void initialize(double init_x, double init_y); void shift(double dx, double dy); double get_x() const; double get_y( ) const;private: double x; double y;};

We can provide a normal member function initialize

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 53: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 53

Constructors: point InitializationConstructors: point Initialization

class point {public: point(double init_x, double init_y); void shift(double dx, double dy); double get_x() const; double get_y( ) const;private: double x; double y;};

Or use a constructor that is automatically called

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

- function name same as class name

- no return type, even no “void” !

Page 54: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 54

Constructors: ImplementationConstructors: Implementation

void point::initialize(double init_x, double init_y){ x = init_x; y = init_y;}

For the most part, the constructor is no different than any other member functions.

We only need to replace initialize with point

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 55: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 55

Constructors: ImplementationConstructors: Implementation

point::point(double init_x, double init_y){ x = init_x; y = init_y;}

For the most part, the constructor is no different than any other member functions.

But there are three special features about constructor . . .

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Page 56: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 56

ConstructorsConstructors

Constructor is a member function which the name must be the same as the class name automatically called whenever a variable of the

class is declared arguments must be given after the variable

name (when declared in user file) A way to improve the initialize function

by providing an initialization function that is guaranteed to be called

Page 57: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 57

Constructors: point InitializationConstructors: point Initialization

Automatically called when declared.

Parameters after the object names

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1: point p2;

p1.initialize(-1.0, 0.8);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

First improvement: automatic initialization without explicitly activating an initialize function

Page 58: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 58

Constructors: point InitializationConstructors: point Initialization

Automatically called when declared.

Parameters after the object names

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1(-1.0, 0.8): point p2(0.3, 0.6);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

First improvement: automatic initialization without explicitly activating an initialize function

Page 59: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 59

Default ConstructorsDefault Constructors

Automatically called when declared.

Parameters after the object names

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1(-1.0, 0.8): point p2(0.3, 0.6);

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Sometime we want to define an object with no parameters…

Page 60: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 60

Default ConstructorsDefault Constructors

Automatically called when declared.

NO parameters after the object name p2

#include <iostream.h>#include <stdlib.h>#include “point.h"

int main( ) { point p1(-1.0, 0.8); point p2;

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

…not even a pair of parentheses

Page 61: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 61

Default ConstructorsDefault Constructors

class point {public: point(); point(double init_x, double init_y); …private: double x; double y;};

We could provide a second constructor with no parameters

x

-2 -1 0 1 2

2 1 0 -1-2

y

p

Implementation

point::point(){ x = 0.0; y = 0.0;}

Page 62: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 62

Constructors: Function OverloadingConstructors: Function Overloading

You may declare as many constructors as you like – one for each different way of initializing an object

Each constructor must have a distinct parameter list so that the compiler can tell them part

Question: How many default constructor is allowed?

Page 63: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 63

Constructors: automatic default constructorConstructors: automatic default constructor

What happens if you write a class without any constructors?

The compiler automatically creates a simple default constructor which only calls the default constructors for the

member variables that are objects of some other classes Programming Tip :Always provide your own

constructors, and better with a default constructor

Page 64: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 64

Value Semantics of a ClassValue Semantics of a Class

Value semantics determines how values are copied from one object to another

Consists of two operations in C++ The assignment operator The copy constructor

Document the value semantics When you implement an ADT, the document should

include a comment indicating that the value semantics is safe to use.

Page 65: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 65

Value Semantics: assignment operatorValue Semantics: assignment operator

Automatic assignment operator For a new class, C++ normally carries out assignment

by simply copying each variable from the object on the right to that on the left

our new class point can use automatic assignment operator

When automatic assignment fails we will see examples in Lecture 4 (pointers and

dynamic arrays)

point p1(-1.0, 0.8), p2;

p2 = p1;

cout << p2.get_x() <<“ “ << p2.get_y();

Page 66: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 66

Value Semantics: copy constructorValue Semantics: copy constructor

A copy constructor is a constructor with exactly one parameter

whose data type is the same as the constructor’s class

is to initialize a new object as an exact copy of an existing object

An example point p1(-1.0, 0.8);

point p2 (p1);

cout << p2.get_x() <<“ “ << p2.get_y();

Page 67: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 67

Value Semantics: copy constructorValue Semantics: copy constructor

A copy constructor is a constructor with exactly one parameter

whose data type is the same as the constructor’s class

is to initialize a new object as an exact copy of an existing object

An alternative syntaxpoint p1(-1.0, 0.8);

point p2 = p1;

cout << p2.get_x() <<“ “<< p2.get_y();

Page 68: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 68

Value Semantics: discussionValue Semantics: discussion

point p2 = p1; versus p2 = p1; The assignment p2 = p1; merely copies p1 to the

already existing object p2 using the assignment operator.

The syntax point p2 = p1; looks like an assignment statement, but actually a declaration that both declare a new object, and calls the copy constructor to initialize p2 as a copy of p1.

p2 will be the same iff the assignment operator and the copy constructor do the same things

Page 69: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 69

Copy Constructor: ImplementationCopy Constructor: Implementation

You may write a copy constructor much like any other constructor Lecture 4 and later

Take advantage of a C++ feature automatic copy constructor similar to assignment, the automatic copy constructor

initializes a new object by merely copy all the member variables from the existing object.

Automatic versions may fail!

Point Demo

Page 70: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 70

Constructors, etc.– a summaryConstructors, etc.– a summary

Constructor is a member function define your own constructors (including a default) automatic default constructor

inline member functions ( Ch 2.2) Place a function definition inside the class definition for time efficiency

value semantics of a class assignment operators and copy constructor automatic assignment op and copy constructor

Page 71: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 71

OutlineOutline

A Review of C++ Classes (Lecture 2) OOP, ADTs and Classes Class Definition, Implementation and Use Constructors and Value Semantics

More on Classes (Lecture 3) Namespace and Documentation Classes and Parameters Operator Overloading

Page 72: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 72

Assignments Assignments

Reading: Chapter 2.3-2.5

Programming assignment 1 - Due Sep. 17 Need all of chapter 2 to finish, but you can

start doing it now Requirements and guidelines have been posted

on the course web site

Page 73: Zhigang Zhu, 2002-2014 1 CSC212 Data Structure - Section FG Lecture 2 ADT and C++ Classes (I) Instructor: Zhigang Zhu Department of Computer Science City.

Zhigang Zhu, 2002-2014 73

THE ENDTHE END

Presentation copyright 1997, Addison Wesley LongmanFor use with Data Structures and Other Objects Using C++by Michael Main and Walter Savitch.

Some artwork in the presentation is used with permission from Presentation Task Force(copyright New Vision Technologies Inc.) and Corel Gallery Clipart Catalog (copyrightCorel Corporation, 3G Graphics Inc., Archive Arts, Cartesia Software, Image ClubGraphics Inc., One Mile Up Inc., TechPool Studios, Totem Graphics Inc.).

Students and instructors who use Data Structures and Other Objects Using C++ arewelcome to use this presentation however they see fit, so long as this copyright notice remains intact.

The first part (p.3-47) of this lecture was adapted from: