slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
11/07/11 PowerPoint Presentation
Download Presentation
11/07/11

Loading in 2 Seconds...

play fullscreen
1 / 58

11/07/11 - PowerPoint PPT Presentation


  • 150 Views
  • Uploaded on

Engineering Problem Solving with C++, Etter/Ingber. Chapter 8 An Introduction to Classes 04-18-12. 11/07/11. Engineering Problem Solving with C++, second edition, J. Ingber. 1. An Introduction To Classes. Programmer Defined Types Design and Implementation of Classes Constructors.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '11/07/11' - kamal


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Engineering Problem Solving with C++, Etter/Ingber

Chapter 8

An Introduction to Classes

04-18-12

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

1

slide2

An Introduction To Classes

  • Programmer Defined Types
  • Design and Implementation of Classes
  • Constructors

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

2

slide3

PROGRAMMER DEFINED TYPES

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

3

slide4

Data Types

  • A data type is a concrete implementation of a concept.
  • Built in types include:
    • int, double, char
  • Pre-defined class types include:
    • string, istream, ostream
  • Real world applications work with concepts that are not available as built-in or pre-defined types.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

4

slide5

The Dog Class

  • The DOG directory has an example of a class to represent a dog.
    • dogProg.cpp
    • Has: Class declaration, class implementation and a testing main()
      • For simplicity all three parts are in one file

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

5

slide6

Class

  • Class Declaration
    • Starts with keyword class
    • Name should begin with uppercase
    • Prototypes for member functions
    • Data members to store data for an object.
  • Class Implementation
    • Define class member functions.
  • Create objects main() testing function
    • Dog fifi;

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

6

slide7

Programmer Defined Types

  • A well-designed class type provides:
    • a good public interface.
    • encapsulation of the implementation.
  • A good public interface provides a complete yet minimal set of public operations.
  • Encapsulation hides the implementation from the user. Data members are private.
  • A good public interface and encapsulation allow for efficient maintenance and expandability of the class type.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

7

slide8

Point Class

  • Consider the concept of a point in a plane, defined as a:
    • xCoordinate
    • yCoordinate
  • Subtraction between points can be defined as a binary operation that returns the distance between two points in a plane.

Point p1, p2;

double dist;

dist = p2-p1;

  • As a programmer, we can define a new type named Point by defining a C++ class named Point.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

8

slide9

Point Class – Special Methods

  • xCoord and yCoord are private.
    • main() and other outside functions cannot see them.
  • Accessor methods allow other functions to see them.
    • getX(), getY()
  • Mutator methods all outside functions to change the attributes.
    • setX(), setY()

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

9

slide10

UML CLASS DIAGRAM FOR POINT

Point

-xCoord

-yCoord

getX()

+getY()

+setX()

+setY()

+operator –()

Note:

- => private

+ => public

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

10

slide11

class declaration

class implementation

DESIGN AND IMPLEMENTATION OF CLASSES

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

11

slide12

Defining C++ Classes

  • The definition of a class consists of two parts:
    • The class declaration
      • saved in a file with a .h extension
    • The class implementation
      • saved in a file with a .cpp extension
      • the .cpp file should #include the .h file

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

12

slide13

The class Declaration

  • A class declaration begins with the key word class followed by an identifier that specifies the name of the new class.
  • The body of the class declaration is a statement block that includes:
    • declaration statements for the data members (attributes)
    • prototypes for the member functions (methods)
  • Keywords public, protected and private controlthe accessibility of the attributes and methods.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

13

slide14

Example - Point class Declaration

//Point class declaration:

// filename: Point.h

class Point

{

private:

double xCoord, yCoord;//private attributes

public:

//Two accessor methods:

double getX() const;

double getY() const;

//Two mutator methods:

void setX(double newX);

void setY(double newY);

//Distance Formula

double operator –(const Point& p2) const;

};

semicolon is required!

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

14

slide15

The Point class Declaration

  • Two private attributes (encapsulation).
  • Five public methods (public interface).
  • The use of the const modifier in the prototypes of the accessor methods prohibits modification of the calling object.
  • The const modifier is not used with the mutator methods because the intent of a mutator method is modification of the calling object.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

15

slide16

Method Definition

  • A method is a function that is a member of class.
  • A method header must include the name of a class, followed by the scope resolution operator (::) and the name of the method.

Syntax:

return type class-name::method-name([parameter list])[modifier]

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

16

slide17

The class Implementation

  • The class implementation includes a definition for each of the methods declared in the class declaration.
  • The scope resolution operator (::) is required in the method header to associate the method name with the name of the class in which the method is declared to be a member.
  • The class implementation file must include the class declaration (.h file).

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

17

slide18

Implementation of Point class

//implementation for Point

//filename: Point.cpp

#include "Point.h" //Required for Point

#include <cmath> //Required for sqrt(),pow()

//accessor method

double Point::getX() const

{

return xCoord;

}

//mutator method

void Point::setX(double newX)

{

xCoord = newX;

}

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

18

slide19

Implementation of Point class

//Distance Formula

double Point::operator –(const Point& rhs) const

{

double t1, t2, d;

t1 = rhs.xCoord – xCoord; //(x2-x1)

t2 = rhs.yCoord – yCoord; //(y2-y1)

d = std::sqrt( std::pow(t1,2) + std::pow(t2,2) );

return d;

}

xCoord and yCoord are provided by the calling object.

std:: is required when the using namespace std; statement is not given.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

19

slide20

The Calling Object

  • An object is an instance of a class.
  • Objects reference (call) the public methods defined for their class.

Example:

#include "Point.h" //Required for Point

#include <iostream> //Required for cout

int main()

{

//A Point has an xCoord and a yCoord

Point p1; //p1 is a Point

p1.setX(5.1); //p1 is the calling object

std::cout << p1.getX() << std::endl;

return 0;

}

Output:

5.1

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

20

sphere class
Sphere class

Design and implement a class called Sphere that contains member data that represents the sphere’s diameter. Give the class accessor and mutator functions. Include functions to find the volume and the surface area of the Sphere. Write a main function to create and test a Sphere.

Engineering Problem Solving with C++, second edition, J. Ingber

start here 4 25 12
Engineering Problem Solving with C++, second edition, J. IngberStart Here, 4/25/12

Quiz 8, Friday, 04/27/12

On 8.1 and 8.2

See question in Practice! On page 353.

slide23

default constructors

parameterized constructors

function overloading

CONSTRUCTORS

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

23

slide24

Constructors

  • A constructor is a method designed to build an instance of a class.
  • A constructor has the same name as its class.
  • A constructor has no specified return value.
  • A constructor is called automatically each time an object is defined.

Syntax:

class-name::class-name([parameter list])[:initialization list]

{ }

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

24

slide25

Constructors

  • There are two forms of constructors:
    • Default Constructor
      • constructor with no formal parameters, other than default parameters.
      • attributes are initialized to the default value.
    • Parameterized Constructor
      • constructor with one or more formal parameters.
      • constructor arguments determine the initial values of the attributes.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

25

slide26

Default Constructor: Point

  • Prototype: add to Point.h

Point();

or

Point(double x=0, double y=0);

x=0 and y=0 are default parameters.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

26

slide27

Default Constructor: Point

  • Definition: add to Point.cpp

Point::Point()

{

xCoord = yCoord = 0;

}

or

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

27

slide28

Example: Default Constructor

Point p1; //Default constructor is called.

Memory snapshot:

Point p1

0.0

double xCoord

0.0

double yCoord

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

28

slide29

Parameterized Constructor: Point

  • Prototype: add to Point.h

Point(double xVal, double yVal);

  • Definition: add to Point.cpp

Point::Point(double xVal, double yVal)

{

xCoord = xVal;

yCoord = yVal;

}

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

29

slide30

Example: Parameterized Constructor

Point p1(1.5, 4.2); //Parameterized constructor.

Memory snapshot:

Point p1

double xCoord

1.5

4.2

double yCoord

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

30

slide31

Point.h Revisited:

//Point class declaration:

// filename: Point.h

class Point

{

private:

double xCoord, yCoord;//private attributes

public:

//Two constructors:

Point();

Point(double x, double y);

//Two accessor methods:

double getX() const;

double getY() const;

//Two mutator methods:

void setX(double newX);

void setY(double newY);

//Distance Formula

double operator –(const Point& p2) const;

};

Point constructors are example of overloaded methods.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

31

slide32

Function Overloading

  • Function overloading occurs when one or more functions have the same name.
    • Point();
    • Point(double x, double y);
  • Overloaded functions share the same name, but each function must have a unique function signature.
  • A function signature includes the :
    • function name
    • parameter list
    • modifiers
    • return value is NOT part of the function signature.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

32

slide33

Function Overloading

  • Example in ch8/ovldmean.cpp

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

33

slide34

Practice!

Add two constructors to this Rational class

class Rational

{ private:

int num, denom;

public:

rational( ); // initialize to 1/1

rational(int n, int d);

int getNum();

int getDenom();

};

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

34

slide35

Practice!

Implement the following class declaration, Also include the constructors from the previous slide:

class Rational

{ private:

int num, denom;

public:

Rational( ); // initialize to 1/1

Rational(int n, int d);

int getNum();

int getDenom();

};

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

35

slide36

CLASS COMPOSITION

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

36

slide37

Class Composition

  • Object oriented problem solutions are built around class hierarchies and associations.
  • Classcomposition is an association used to model a "has-a" relationship between classes:
    • the whole "has-a" component.
    • the component is "part-of" the whole.
  • Class composition allows for efficient building of complex programmer defined types.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

37

slide38

Example:

  • A rectangle is a shape that has a:
    • point of origin
    • width
    • height
  • Implement the concept of a rectangle by defining a programmer defined type named Rectangle.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

38

slide39

UML CLASS COMPOSITION DIAGRAM

Rectangle

  • double width
  • double height
  • Point origin

1

Point

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

39

rectangle composition class
Engineering Problem Solving with C++, second edition, J. IngberRectangle Composition Class

Code is in ch8/EtterRectangle

Must compile the Point class along with the Rectangle class so the Rectangle can use that class

testRectangle.cpp tests the class.

rectangle composition class1
Engineering Problem Solving with C++, second edition, J. IngberRectangle Composition Class

Code is in ch8/EtterRectangle

Let’s test the setOrigin() function

slide42

parameter passing

THE VECTOR CLASS

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

42

slide43

The vector class

  • The vector class is a pre-defined classtemplate included in the C++ Standard Template Library.
  • The vector class provides a generic implementation of the concept of an array.
  • vector objects can increase and decrease their size dynamically.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

43

slide44

vector Objects

  • We can define an instance of the vectorclass in a type declaration statement.

Syntax:

vector<data-type> identifier[(size,initial-value)]

Examples:

vector <double> list; //empty vector

vector<string> wordList(n); //capacity:n strings

//vector of 8 integers, each initialized to 0

vector<int> intList(8,0);

11/07/11

J. Ingber Introduction to C++

44

slide45

vector class

  • #include <vector> //pre-defined in STL
  • Common member functions:

empty() // returns true if vector contains no values

pop_back() // deletes last element in vector

push_back() // add element to end of vector

resize() // changes the size of vector

size() // returns the size of vector

11/07/11

J. Ingber Introduction to C++

45

slide46

Operators

  • The square bracket operator ( [ ] ) is defined for vector objects.
  • The assignment operator ( = )is defined for vectors of the same type.

Example:

vector<int> list(10);

vector<int>newList;

list[0]=10;

newList = list;

cout << newList.size() << endl; //method

11/07/11

J. Ingber Introduction to C++

46

slide47

Parameter Passing

  • When a vector object is passed as an argument to a function, the default is pass by value.
  • Pass by reference can be specified with the & operator.

Example:

void scale(vector<double>& dVec, double sFactor);

void print(vector<double> dVec);//pass by value

void print2(const vector<double>& dVec);

Point closeToOrigin(vector<Point> pointVec);

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

47

programming example
Engineering Problem Solving with C++, second edition, J. IngberProgramming Example

Vector.cpp

Inputs a list of ints

Outputs the numbers in the order entered and in reverse order

Don’t have to the number of integers before execution.

slide49

PRIVATE METHODS

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

49

slide50

Helper Methods

  • private or protected member functions.
  • Called by other member functions.
  • Designed to "help" behind the scenes.

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

50

slide51

Example

Design a class to implement the mathematical concept of a unit vector.

Attributes:

an anchor point (the base of the vector)

an orientation of 0 - 360 degrees. 

Methods:

translate(double dx, double dy):

rotate (int dDegrees);

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

51

slide52

Translation - change position but not orientation

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

52

slide53

Rotation - change orientation around anchor point

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

53

slide54

Class Declaration

class UnitVector { public:

UnitVector(); // contstructors

UnitVector(double init_x, double init_y, int init_orientation); void rotate(int d_orient);     // rotate the vector void translate(double dx, double dy); // translate the // vector.

private:

//helper function     void fixOrientation();   // Calculate a legal orientation      double x, y;                   // The anchor point of the object.      int orientation; //orientation

};

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

54

slide55

Class Implementation

//Constructors

UnitVector::UnitVector(double initX, double initY, int initO)) : x(initX), y(initY), orientation(initO)

{

fixOrientation();

}

UnitVector::UnitVector( ): x(0), y(0), orientation(0)

{ }

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

55

slide56

Member Function Definitions

// rotate the calling vector

void UnitVector::rotate(int d_orient)      

{ orientation += d_orient;

fixOrientation();

}

// translate the calling vector

void UnitVector::translate(double dx, double dy)

{ x += dx;

y += dy;

}

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

56

slide57

Helper Function Definition

//This function adjusts the orientation value

//Original orientation may be < 0 or >= 360)

//Adjusted orientation is 0<=orientation < 360.

void UnitVector::fixOrientation()

  {

if(orientation < 0)

orientation = 360 + orientation%360;

else

orientation = orientation%360;

}

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

57

slide58

Practice!

Which of the statements on the right is valid within a main program which contains an include for this header file.

class rational

{ private:

int num, denom;

int LCD( );

public:

rational( );

rational(int n, int d);

void input (istream & istr );

void output (ostream & ostr);

void reduce ( );

};

  • rational A;
  • rational B(5, 9);
  • input(A);
  • B.output(cout);
  • int div=B.LCD();
  • A.denom = 3;
  • B.reduce();

11/07/11

Engineering Problem Solving with C++, second edition, J. Ingber

58