C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes
C++ Classes and Data Structures Jeffrey S. Childs Chapter 1 Structs and Classes
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.)
6
Object Assignment
• An object of a struct can be assigned to
another object of the same struct type:
myCar = yourCar;
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 }
29
Example of a Class (cont.)
15 #include “checkbook.h”
16
17 void Checkbook::setBalance( float amount )
18 {
19 balance = amount;
20 }
30
Example of a Class (cont.)
31
Example of a Class (cont.)
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
53
First Technique
Class 1
bugs in the classes
Class 2
Main
Class 3 Program
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.
Class 3
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.)
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?
63