0% found this document useful (0 votes)
2K views

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

C++ Classes and Data Structures ppt Ch1

Uploaded by

samba684
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views

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

C++ Classes and Data Structures ppt Ch1

Uploaded by

samba684
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 63

C++ Classes and Data Structures

Jeffrey S. Childs

Chapter 1
Structs and Classes

Jeffrey S. Childs
Clarion University of PA
© 2008, Prentice Hall

1
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
Example Using a Struct
1 #include <iostream>
2 #include <iomanip>
3 #include <string>
4
5 using namespace std;
6
7 struct CarType {
8 string maker;
9 int year;
10 float price; Don’t forget this
11 }; semicolon.
12
13 void getYourCar( CarType & car );
14 3
Example Using a Struct (cont.)

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

4
Example Using a Struct (cont.)

23 getYourCar( yourCar );
24
25 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;
29
30 return 0;
31 }
32
5
Example Using a Struct (cont.)

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 }

6
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
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
Main Program Using Objects

Object A

Main
Program Object C

Object B

9
Main Program Using Objects

Object A

Main
Program Object C

Object B

10
Main Program Using Objects

Object A

Main
Program Object C

Object B

11
Main Program Using Objects

Object A

Main
Program Object C

Object B

12
Main Program Using Objects

Object A

Main
Program Object C

Object B

13
How the Main Program
Uses 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
Main Program and Object
Object

public: private:
functions data

Main
Program

15
Main Program Calls a Function in
the Object
Object

public: private:
functions data

Main
Program

16
The Function Accesses Data
Object

public: private:
functions data

Main
Program

17
Function Returns a Value Back to the
Main Program
Object

public: private:
functions data

Main
Program

18
Main Program Calls a Different
Function Object

public: private:
functions data

Main
Program

19
Function Calls Another Function
Object

public: private:
functions data

Main
Program

20
Second Function Accesses Data
Object

public: private:
functions data

Main
Program

21
Second Function Returns Back to First
Function
Object

public: private:
functions data

Main
Program

22
First Function Accesses Data
Object

public: private:
functions data

Main
Program

23
Function Returns Back to Main
Program
Object

public: private:
functions data

Main
Program

24
Example of a Class
1 class Checkbook
2 {
3 public:
4 void setBalance( float amount );
5 bool writeCheck( float amount );
6 void deposit( float amount );
7 float getBalance( );
8 float getLastCheck( ); This class definition is
9 float getLastDeposit( ); placed into its own file,
10 private: called the class
11 float balance; specification file,
12 float lastCheck; named checkbook.h (by
13 float lastDeposit; convention)
14 };
25
Example of a Class (cont.)
1 class Checkbook
2 {
3 public:
4 void setBalance( float amount );
5 bool writeCheck( float amount );
6 void deposit( float amount );
7 float getBalance( );
8 float getLastCheck( ); The writeCheck
9 float getLastDeposit( ); function returns false
10 private: if the amount of the
11 float balance; check is greater than
12 float lastCheck; the balance; returns
13 float lastDeposit; true otherwise.
14 };
26
Example of a Class (cont.)
1 class Checkbook
2 {
3 public:
4 void setBalance( float amount );
5 bool writeCheck( float amount );
6 void deposit( float amount );
7 float getBalance( );
8 float getLastCheck( ); Don’t forget the
9 float getLastDeposit( ); semicolon.
10 private:
11 float balance;
12 float lastCheck;
13 float lastDeposit;
14 };
27
Example of a Class (cont.)
15 #include “checkbook.h”
16
17 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).

28
Example of a Class (cont.)
15 #include “checkbook.h”
16
17 void Checkbook::setBalance( float amount )
18 {
19 balance = amount;
20 }

The balance variable is declared in the


private section of the class definition.

29
Example of a Class (cont.)
15 #include “checkbook.h”
16
17 void Checkbook::setBalance( float amount )
18 {
19 balance = amount;
20 }

Special notation for class


function definitions

30
Example of a Class (cont.)

21 bool Checkbook::writeCheck( float amount )


22 {
23 if ( amount > balance )
24 return false;
25 balance -= amount;
26 lastCheck = amount;
27 return true;
28 }

31
Example of a Class (cont.)

29 void Checkbook::deposit( float amount )


30 {
31 balance += amount;
32 lastDeposit = amount;
33 }

32
Example of a Class (cont.)

34 float Checkbook::getBalance( )
35 {
36 return balance;
37 }
38
39 float Checkbook::getLastCheck( )
40 {
41 return lastCheck;
42 }
end of checkbook.cpp
33
A Program that Uses the
“Checkbook” Class
1 #include <iostream> A main program that
2 #include <iomanip> uses the "Checkbook"
3 #include "checkbook.h" class is placed into a
4 separate .cpp file
5 using namespace std;
6
7 int menu( );
8
9 const int CHECK = 1, DEPOSIT = 2, BALANCE = 3, QUIT
= 4;
10
11 int main( )

34
A Program that Uses the
"Checkbook" Class (cont.)
12 {
13 Checkbook cb;
14 float balance, amount;
15 int choice;
16 cout << "Enter the initial balance: $";
17 cin >> balance;
18 cb.setBalance( balance );
19
20 cout << fixed << showpoint <<
setprecision( 2 );
35
A Program that Uses the
"Checkbook" Class (cont.)
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 {

36
A Program that Uses the
"Checkbook" Class (cont.)
29 cout << "Your balance is not high ";
30 cout << "enough for that check." << endl;
31 }
32} body of the while loop continues
33 else if ( choice == DEPOSIT ) {
34 cout << "Enter deposit amount: $";
35 cin >> amount;
36 cb.deposit( amount );
37 cout << "Deposit accepted." << endl;
38 }
body of the while loop continues

37
A Program that Uses the
"Checkbook" Class (cont.)
39 else { // must be a balance request
40 amount = cb.getBalance( );
41 cout << "Your balance is: $" << amount <<
endl;
42 }
43
44 choice = menu( );
45 } end of while loop
46
47 return 0;
48 }
49 38
A Program that Uses the
"Checkbook" Class (cont.)
50 int menu( )
51 {
52 int choice;
53
54 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 }
39
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
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
If Data Members were
Accessed Directly…

Class Main
Program
int a;
int b;
int c;
.
.
Suppose the variables of .
a class were accessed by
100 places in a program

42
If Data Members were
Accessed Directly… (cont.)

Class Main
Program
int arr[10]

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

43
If Data Members were
Accessed Directly… (cont.)

Class Main
Program
int arr[10]

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

44
Data Members Should
Be Private
Class
Main
Program
int foo( int x )

private: .
int a; .
int b; Here, the main program .
int c; calls function “foo” from
100 places.

45
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
int a; .
int b; Then foo accesses the .
int c; private data members.

46
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
.
int arr[10] .
If the data needs to
change, then only the
function “foo” will need
to be rewritten.
47
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
.
int arr[10] .
However, the function call
of foo and the return type
will stay the same.

48
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
.
int arr[10] .
i.e. No changes need to
be made in the main
program!

49
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
.
int arr[10] .
Program maintenance is
easier this way…especially
if there is more than one
program using the class.
50
Data Members Should
Be Private (cont.)
Class
Main
Program
int foo( int x )

private: .
.
int arr[10] .
especially if there is more
than one program using
the class.

51
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
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
First Technique
Class 1
bugs in the classes

Class 2

Main
Class 3 Program

Class 4 Let’s assume it takes 2


hours, on average, to fix
each problem.

54
2 Technique - Using Drivers
nd

Class 1
We’ll try the second
technique – write a
driver to test each
Class 2
class.
Assume it takes one
hour to write a driver.
Class 3
Fixing a runtime error
will be faster – let’s
say it takes a half an
Class 4 hour.

Time for first technique: 40:00


55
Using Drivers (cont.)
Class 1

Time for first technique: 40:00


Class 2

Class 3

Class 4 Runtime Errors: 0


Driver
Time: 14:00
56
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
Function Definitions in the Class
Specification (cont.)
1 // checkbook.h – A class for a checkbook
2 class Checkbook
3 {
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 true
10 void deposit( float amount ) { balance += amount;
11 lastDeposit = amount; }

58
Function Definitions in the Class
Specification (cont.)

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 };

59
Function Definitions in the Class
Specification (cont.)
20 // checkbook.cpp – function definitions for the
21 // Checkbook class
22 #include “checkbook.h”
23
24 bool Checkbook::writeCheck( float amount )
25 {
26 if ( amount > balance )
27 return false;
28 balance -= amount;
29 lastCheck = amount;
30 return true;
31 }
60
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
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
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

You might also like