Top Banner
C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes 1 Jeffrey S. Childs Clarion University of PA © 2008, Prentice Hall
63

C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Nov 26, 2014

Download

Documents

samba684

C++ Classes and Data Structures ppt Ch1
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

C++ Classes and Data StructuresJeffrey S. Childs

Chapter 1Structs and Classes

1

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Page 2: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Structs

• A struct holds data, like an array• Each unit of data in a struct is called a data

member (or member)– they are called “elements” in arrays

• In a struct, each data member can have a different data type– in arrays, the data type of each element is the

same

2

Page 3: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example Using a Struct

3

1 #include <iostream>2 #include <iomanip>3 #include <string>45 using namespace std;67 struct CarType {8 string maker;9 int year;10 float price;11 };1213 void getYourCar( CarType & car );14

Don’t forget this semicolon.

Page 4: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example Using a Struct (cont.)

4

15 int main( )16 {17 CarType myCar, yourCar;1819 myCar.maker = "Mercedes"; // I wish20 myCar.year = 2005;21 myCar.price = 45567.75;22

Page 5: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example Using a Struct (cont.)

5

23 getYourCar( yourCar );2425 cout << "Your car is a: " <<

yourCar.maker << endl;26 cout << fixed << showpoint <<

setprecision( 2 ) << 27 "I'll offer $" << yourCar.price - 100

<< 28 " for your car." << endl;2930 return 0;31 }32

Page 6: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example Using a Struct (cont.)

6

33 void getYourCar( CarType & car )34 {35 cout << "Enter your maker: ";36 cin >> car.maker;37 cout << "Enter the year: ";38 cin >> car.year;39 cout << "Enter the price: $";40 cin >> car.price;41 }

Page 7: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Object Assignment

• An object of a struct can be assigned to another object of the same struct type:

myCar = yourCar;

• This assigns each data member in yourCar to the corresponding data member of myCar

• Also assigns any array data members

7

Page 8: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Classes

• A class is similar to a struct• A class contains data members, but it also contains

function members• Objects are made from classes, similarly to the way

that objects are made from structs• The main program communicates with the objects

– data is passed from main program to object and from object back to the main program

8

Page 9: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Using Objects

9

Object A

Object B

Object C

Main

Program

Page 10: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Using Objects

10

Object A

Object B

Object C

Main

Program

Page 11: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Using Objects

11

Object A

Object B

Object C

Main

Program

Page 12: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Using Objects

12

Object A

Object B

Object C

Main

Program

Page 13: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Using Objects

13

Object A

Object B

Object C

Main

Program

Page 14: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

How the Main ProgramUses A Class Object

• The main program does not access the data within a class object

• The main program only accesses the functions of a class object– communication occurs by passing data as

parameters into the object’s function– the object passes data to the main program

through its return type

14

Page 15: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program and Object

15

Main

Program

Object

public:

functions

private:

data

Page 16: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Calls a Function in the Object

16

Main

Program

Object

public:

functions

private:

data

Page 17: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

The Function Accesses Data

17

Main

Program

Object

public:

functions

private:

data

Page 18: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Returns a Value Back to the Main Program

18

Main

Program

Object

public:

functions

private:

data

Page 19: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Main Program Calls a Different Function

19

Main

Program

Object

public:

functions

private:

data

Page 20: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Calls Another Function

20

Main

Program

Object

public:

functions

private:

data

Page 21: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Second Function Accesses Data

21

Main

Program

Object

public:

functions

private:

data

Page 22: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Second Function Returns Back to First Function

22

Main

Program

Object

public:

functions

private:

data

Page 23: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

First Function Accesses Data

23

Main

Program

Object

public:

functions

private:

data

Page 24: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Returns Back to Main Program

24

Main

Program

Object

public:

functions

private:

data

Page 25: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class

25

1 class Checkbook2 {3 public:4 void setBalance( float amount );5 bool writeCheck( float amount ); 6 void deposit( float amount );7 float getBalance( );8 float getLastCheck( );9 float getLastDeposit( ); 10 private:11 float balance;12 float lastCheck;13 float lastDeposit;14 };

This class definition is placed into its own file, called the class specification file, named checkbook.h (by convention)

Page 26: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

26

1 class Checkbook2 {3 public:4 void setBalance( float amount );5 bool writeCheck( float amount ); 6 void deposit( float amount );7 float getBalance( );8 float getLastCheck( );9 float getLastDeposit( ); 10 private:11 float balance;12 float lastCheck;13 float lastDeposit;14 };

The writeCheck function returns false if the amount of the check is greater than the balance; returns true otherwise.

Page 27: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

27

1 class Checkbook2 {3 public:4 void setBalance( float amount );5 bool writeCheck( float amount ); 6 void deposit( float amount );7 float getBalance( );8 float getLastCheck( );9 float getLastDeposit( ); 10 private:11 float balance;12 float lastCheck;13 float lastDeposit;14 };

Don’t forget the semicolon.

Page 28: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

28

15 #include “checkbook.h”1617 void Checkbook::setBalance( float amount )18 {19 balance = amount;20 } The function definitions are placed into a

separate file called the class implementation file. This file would be called checkbook.cpp (by convention).

Page 29: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

29

15 #include “checkbook.h”1617 void Checkbook::setBalance( float amount )18 {19 balance = amount;20 }

The balance variable is declared in the private section of the class definition.

Page 30: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

30

15 #include “checkbook.h”1617 void Checkbook::setBalance( float amount )18 {19 balance = amount;20 }

Special notation for class function definitions

Page 31: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

31

21 bool Checkbook::writeCheck( float amount )22 {23 if ( amount > balance )24 return false;25 balance -= amount;26 lastCheck = amount;27 return true;28 }

Page 32: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

32

29 void Checkbook::deposit( float amount )30 {31 balance += amount;32 lastDeposit = amount;33 }

Page 33: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Example of a Class (cont.)

33

34 float Checkbook::getBalance( ) 35 {36 return balance;37 }3839 float Checkbook::getLastCheck( )40 {41 return lastCheck;42 }

end of checkbook.cpp

Page 34: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

A Program that Uses the “Checkbook” Class

34

1 #include <iostream>2 #include <iomanip>3 #include "checkbook.h"45 using namespace std;67 int menu( );89 const int CHECK = 1, DEPOSIT = 2, BALANCE = 3, QUIT = 4; 1011 int main( )

A main program that uses the "Checkbook" class is placed into a separate .cpp file

Page 35: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

35

12 {13 Checkbook cb;14 float balance, amount;15 int choice;16 cout << "Enter the initial balance: $";17 cin >> balance;18 cb.setBalance( balance );1920 cout << fixed << showpoint << setprecision( 2 );

A Program that Uses the "Checkbook" Class (cont.)

Page 36: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

36

21 choice = menu( );22 while ( choice != QUIT ) {23 if ( choice == CHECK ) {24 cout << "Enter check amount: $";25 cin >> amount;26 if ( cb.writeCheck( amount ) )27 cout << "Check accepted." << endl;28 else {

A Program that Uses the "Checkbook" Class (cont.)

Page 37: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

37

29 cout << "Your balance is not high ";30 cout << "enough for that check." << endl; 31 }32} 33 else if ( choice == DEPOSIT ) {34 cout << "Enter deposit amount: $";35 cin >> amount;36 cb.deposit( amount );37 cout << "Deposit accepted." << endl;38 }

A Program that Uses the "Checkbook" Class (cont.)

body of the while loop continues

body of the while loop continues

Page 38: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

38

39 else { // must be a balance request40 amount = cb.getBalance( );41 cout << "Your balance is: $" << amount << endl;42 }4344 choice = menu( );45 } 4647 return 0;48 }49

A Program that Uses the "Checkbook" Class (cont.)

end of while loop

Page 39: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

39

50 int menu( )51 {52 int choice;5354 cout << endl;55 cout << "1 Write a check" << endl;56 cout << "2 Make a deposit" << endl;57 cout << "3 Get the balance" << endl;58 cout << "4 Quit" << endl << endl;59 cout << "Enter a number between 1 and 4: ";60 cin >> choice;61 return choice;62 }

A Program that Uses the "Checkbook" Class (cont.)

Page 40: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Keep In Mind

• The data members of a class cannot be accessed by a main program.

• The object always retains the current values of its data members, even when object code is no longer executing.

• Each function of a class can use the data members of the class as though they have been declared within the function.

40

Page 41: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Maintenance

• Maintenance refers to any work done on a program after it is put into operation

• The world constantly changes• Programs have to be maintained (modified) to

keep up with the changes• When programs are maintained, the data

members sometimes have to change• Private data members make it easier to

maintain a program

41

Page 42: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

If Data Members were Accessed Directly…

42

Class

int a;int b;int c;

Main Program

.

.

.Suppose the variables of a class were accessed by 100 places in a program

Page 43: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

If Data Members were Accessed Directly… (cont.)

43

Class

int arr[10]

Main Program

.

.

.Then we need to change the way the data is repre-sented (for maintenance)

Page 44: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

If Data Members were Accessed Directly… (cont.)

44

Class

int arr[10]

Main Program

.

.

.We need to change 100 lines of code in the main

program!

Page 45: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private

45

Class

private:int a;int b;int c;

Main Program

.

.

.Here, the main program calls function “foo” from

100 places.

int foo( int x )

Page 46: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

46

Class

private:int a;int b;int c;

Main Program

.

.

.Then foo accesses the private data members.

int foo( int x )

Page 47: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

47

Class

private:

int arr[10]

Main Program

.

.

.If the data needs to change, then only the

function “foo” will need to be rewritten.

int foo( int x )

Page 48: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

48

Class

private:

int arr[10]

Main Program

.

.

.However, the function call of foo and the return type

will stay the same.

int foo( int x )

Page 49: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

49

Class

private:

int arr[10]

Main Program

.

.

.i.e. No changes need to be made in the main

program!

int foo( int x )

Page 50: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

50

Class

private:

int arr[10]

Main Program

.

.

.Program maintenance is easier this way…especially

if there is more than one program using the class.

int foo( int x )

Page 51: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Data Members ShouldBe Private (cont.)

51

Class

private:

int arr[10]

Main Program

.

.

.especially if there is more than one program using the class.

int foo( int x )

Page 52: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

When Writing a Class

• Your class may be used by hundreds or even thousands of clients (main programmers)

• Write your class for clients, not for computer users

• Do not put code in your class which gives messages to users or asks users for information – let clients handle this the way they want

52

Page 53: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Debugging a Program with Classes

• First technique – make the classes and the main program and test everything all at once– inefficient: takes a long time to track down each

bug

• Second technique – test each class as it is made by writing a main program just to test it (called a test driver or driver)

53

Page 54: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

First Technique

54

Class 1

Class 2

Class 3

Class 4

Main

Program

bugs in the classes

Let’s assume it takes 2 hours, on average, to fix each problem.

Page 55: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

2nd Technique - Using Drivers

55

Class 1

Class 2

Class 3

Class 4

We’ll try the second technique – write a driver to test each class.

Assume it takes one hour to write a driver.

Fixing a runtime error will be faster – let’s say it takes a half an hour.

Time for first technique: 40:00

Page 56: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Using Drivers (cont.)

56

Class 1

Class 2

Class 3

Class 4 Runtime Errors: 0Time: 14:00Drive

r

Time for first technique: 40:00

Page 57: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Definitions in the Class Specification

• The following slides show that function definitions can be placed into the class specification.

• In general, we should avoid doing this because it is a hindrance to program maintenance.

• It is shown here because you will see code written this way during your career.

57

Page 58: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Definitions in the Class Specification (cont.)

58

1 // checkbook.h – A class for a checkbook2 class Checkbook3 {4 public:5 void setBalance( float amount ) 6 { balance = amount; }7 bool writeCheck( float amount ); // returns

false if 8 // amount is greater than balance; 9 // otherwise returns true10 void deposit( float amount ) { balance

+= amount; 11 lastDeposit =

amount; }

Page 59: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Definitions in the Class Specification (cont.)

59

12 float getBalance( ) { return balance; } 13 float getLastCheck( ) { return lastCheck; } 14 float getLastDeposit( ) { return lastDeposit; }

15 private:16 float balance;17 float lastCheck;18 float lastDeposit;19 };

Page 60: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Function Definitions in the Class Specification (cont.)

60

20 // checkbook.cpp – function definitions for the 21 //Checkbook class22 #include “checkbook.h”2324 bool Checkbook::writeCheck( float amount )25 {26 if ( amount > balance )27 return false;28 balance -= amount;29 lastCheck = amount;30 return true;31 }

Page 61: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Struct vs. Class

• Functions can be placed in a struct, but only when necessary

• The public and private keywords can be left out of a class (rare).

• The public and private keywords can be placed into a struct (rare).

61

Page 62: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Struct vs. Class (cont.)**************

So what is the difference between a struct and a class?

•If public and private are not used in a struct, all data members are public by default.•If public and private are not used in a class, all data members are private by default.

**************KEY SLIDE!!!

62

Page 63: C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes

Conventions

• By convention, we use structs when we want all data members to be public– structs are typically defined and used within the

client’s program, not in a separate file– typically used for records of information

• By convention, we use classes when we want all data members to be private (for maintenance purposes)

63