CSCI-383 Object-Oriented Programming & Design Lecture 5

Preview:

Citation preview

CSCI-383

Object-Oriented Programming & Design

Lecture 5

2

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

3

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Example Using a Struct

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.

4

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example Using a Struct (cont.)

5

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example Using a Struct (cont.)

6

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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 }

Example Using a Struct (cont.)

7

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

8

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

9

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

10

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

11

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

12

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

13

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

14

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

15

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

16

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

17

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Using Objects

Object A

Object B

Object C

Main

Program

18

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

19

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program and Object

Main

Program

Object

public:

functions

private:

data

20

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Calls a Function in the Object

Main

Program

Object

public:

functions

private:

data

21

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

The Function Accesses Data

Main

Program

Object

public:

functions

private:

data

22

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Function Returns a Value Back to the Main Program

Main

Program

Object

public:

functions

private:

data

23

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Main Program Calls a Different Function

Main

Program

Object

public:

functions

private:

data

24

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Function Calls Another Function

Main

Program

Object

public:

functions

private:

data

25

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Second Function Accesses Data

Main

Program

Object

public:

functions

private:

data

26

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Second Function Returns Back to First Function

Main

Program

Object

public:

functions

private:

data

27

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

First Function Accesses Data

Main

Program

Object

public:

functions

private:

data

28

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Function Returns Back to Main Program

Main

Program

Object

public:

functions

private:

data

29

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Example of a Class

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)

30

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Example of a Class (cont.)

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.

31

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Example of a Class (cont.)

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.

32

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

The function definitions are placed into a separate file called the class implementation file. This file would be called checkbook.cpp (by convention).

33

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

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

34

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

Special notation for class function definitions

35

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

36

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

37

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

Example of a Class (cont.)

end of checkbook.cpp

38

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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( )12 {13 Checkbook cb;14 float balance, amount;15 int choice;

A Program that Uses the Checkbook Class

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

39

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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.)

40

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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 {29 cout << "Your balance is not high ";30 cout << "enough for that check." << endl; 31 }32 }

A Program that Uses the Checkbook Class (cont.)

body of the while loop continues

41

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

42

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

43

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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.)

44

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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

45

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

If Data Members were Accessed Directly…

Class

int a;int b;int c;

Main Program

.

.

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

46

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

If Data Members were Accessed Directly… (cont.)

Class

int arr[10]

Main Program

.

.

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

47

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

If Data Members were Accessed Directly… (cont.)

Class

int arr[10]

Main Program

.

.

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

48

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private

Class

private:int a;int b;int c;

Main Program

.

.

.Here, the main program calls foo from 100 places.

int foo( int x )

49

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:int a;int b;int c;

Main Program

.

.

.Then foo accesses the private data members.

int foo( int x )

50

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:

int arr[10]

Main Program

.

.

.If the data needs to change, the body of foo will need to be rewritten.

int foo( int x )

51

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:

int arr[10]

Main Program

.

.

.However, the function call of foo and return type will stay the same.

int foo( int x )

52

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:

int arr[10]

Main Program

.

.

.No changes need to be made in the main program!

int foo( int x )

53

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:

int arr[10]

Main Program

.

.

.Program maintenance is easier this way…

int foo( int x )

54

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

Data Members ShouldBe Private (cont.)

Class

private:

int arr[10]

Main Program

.

.

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

int foo( int x )

55

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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)

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

56

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

• 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

Struct vs. Class (cont.)

57

Jeffrey S. Childs

Clarion University of PA

© 2008, Prentice Hall

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)

Recommended