0% found this document useful (0 votes)
59 views50 pages

2003 Prentice Hall, Inc. All Rights Reserved

1) The document discusses a Time class that implements a time abstract data type with private data members for hour, minute, and second and public member functions. 2) The Time class constructor initializes the private data members to 0. 3) The setTime member function checks parameters for validity before setting the private data members.

Uploaded by

Aws Idrees
Copyright
© © All Rights Reserved
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)
59 views50 pages

2003 Prentice Hall, Inc. All Rights Reserved

1) The document discusses a Time class that implements a time abstract data type with private data members for hour, minute, and second and public member functions. 2) The Time class constructor initializes the private data members to 0. 3) The setTime member function checks parameters for validity before setting the private data members.

Uploaded by

Aws Idrees
Copyright
© © All Rights Reserved
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/ 50

1

Chapter 6: Classes and


Data Abstraction
Outline
6.1 Introduction
6.5 Implementing a Time Abstract Data Type with a class
6.6 Class Scope and Accessing Class Members
6.8 Controlling Access to Members
6.9 Access Functions and Utility Functions
6.10 Initializing Class Objects: Constructors
6.14 Using Set and Get Functions
6.16 Default Memberwise Assignment

 2003 Prentice Hall, Inc. All rights reserved.


2

6.1 Introduction

• Object-oriented programming (OOP)


– Encapsulates data (attributes) and functions (behavior) into
packages called classes
• Information hiding
– Class objects communicate across well-defined interfaces
– Implementation details hidden within classes themselves
• User-defined (programmer-defined) types: classes
– Data (data members)
– Functions (member functions or methods)
– Similar to blueprints – reusable
– Class instance: object

 2003 Prentice Hall, Inc. All rights reserved.


3
6.5 Implementing a Time Abstract Data Type
with a class
• Classes
– Model objects
• Attributes (data members)
• Behaviors (member functions)
– Defined using keyword class
– Member functions
• Methods
• Invoked in response to messages
• Member access specifiers
– public:
• Accessible wherever object of class in scope
– private:
• Accessible only to member functions of class
– protected:
 2003 Prentice Hall, Inc. All rights reserved.
4
6.5 Implementing a Time Abstract Data Type
with a class
• Constructor function
– Special member function
• Initializes data members
• Same name as class
– Called when object instantiated
– Several constructors
• Function overloading
– No return type

 2003 Prentice Hall, Inc. All rights reserved.


5
1 class Time {
2
Outline
3 public: Function prototypes for
4 Time();
Definition of class
Class begins
// body with left member functions.
startspublic
constructor
with keyword class. Class Time
5 void setTime( int, int, int brace.
); // set hour, minute, second
definition
6 void printUniversal(); Member// access specifiers.
print universal-time format
7 void printStandard();
Constructor has same name as
// print standard-time format
(1 of 1)
8 class, private
Time, anddata
no return
members
9 private: type. accessible only to member
10 int hour; // 0 - 23 (24-hour functions.
clock format)
11 int minute;
Class
// 0
body
Definition
- 59
ends
terminatesright
with with
12 int second; //brace.
semicolon.
0 - 59
13
14 }; // end class Time

 2003 Prentice Hall, Inc.


All rights reserved.
6
6.5 Implementing a Time Abstract Data Type
with a class
• Objects of class
– After class definition
• Class name new type specifier
– C++ extensible language
• Object, array, pointer and reference declarations
– Example: Class name becomes new
type specifier.
Time sunset; // object of type Time
Time arrayOfTimes[ 5 ]; // array of Time objects
Time *pointerToTime; // pointer to a Time object
Time &dinnerTime = sunset; // reference to a Time object

 2003 Prentice Hall, Inc. All rights reserved.


7
6.5 Implementing a Time Abstract Data Type
with a class
• Member functions defined outside class
– Binary scope resolution operator (::)
• “Ties” member name to class name
• Uniquely identify functions of particular class
• Different classes can have member functions with same name
– Format for defining member functions
ReturnType ClassName::MemberFunctionName( ){

}
– Does not change whether function public or private
• Member functions defined inside class
– Do not need scope resolution operator, class name
– Compiler attempts inline
• Outside class, inline explicitly with keyword inline

 2003 Prentice Hall, Inc. All rights reserved.


8
1 // Fig. 6.3: fig06_03.cpp
2 // Time class.
Outline
3 #include <iostream>
4
fig06_03.cpp
5 using std::cout;
(1 of 5)
6 using std::endl;
7
8 #include <iomanip>
9
10 using std::setfill;
11 using std::setw; Define class Time.
12
13 // Time abstract data type (ADT) definition
14 class Time {
15
16

 2003 Prentice Hall, Inc.


All rights reserved.
9
22 private:
23 int hour; // 0 - 23 (24-hour clock format)
Outline
24 int minute; // 0 - 59
25 int second; // 0 - 59
fig06_03.cpp
26
(2 of 5)
27 public:
17
29 // Time constructor initializes each data member to zero and
Constructor initializes
30 // ensures all Time objects start in a consistent state
31 Time() private data members
32 { to 0.
33 hour = minute = second = 0;
34
35 } // end Time constructor
36
37 // set new Time value using universal time, perform validity
38 // checks on the data values and set invalid values to zero public member
39 void setTime( int h, int m, int s ) function checks
40 {
parameter values for
41 hour = ( h >= 0 && h < 24 ) ? h : 0;
validity before setting
42 minute = ( m >= 0 && m < 60 ) ? m : 0;
43 second = ( s >= 0 && s < 60 ) ? s : 0;
private data
44 members.
45 } // end function setTime
46

 2003 Prentice Hall, Inc.


All rights reserved.
10
47 // print Time in universal format
48 void printUniversal()
Outline
49 {
50 cout << setfill( '0' ) << setw( 2 ) << hour << ":"
fig06_03.cpp
51 << setw( 2 ) << minute << ":"
(3 of 5)
52 << setw( 2 ) << second;
53
54 } // end function printUniversal No arguments (implicitly
55 “know” purpose is to print
56 // print Time in standard format data members); member
57 void printStandard() function calls more concise.
58 {
59 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
60 << ":" << setfill( '0' ) << setw( 2 ) << minute
61 << ":" << setw( 2 ) << second
62 << ( hour < 12 ? " AM" : " PM" );
63
64 } // end function printStandard
Declare variable t to be
65 }; // end class Time
object of class Time.
66 int main()
67 {
68 Time t; // instantiate object t of class Time
69

 2003 Prentice Hall, Inc.


All rights reserved.
11
70 // output Time object t's initial values
71 cout << "The initial universal time is ";
Outline
72 t.printUniversal(); // 00:00:00
73
Invoke public member fig06_03.cpp
74 cout << "\nThe initial standard time is ";
functions to print time. (4 of 5)
75 t.printStandard(); // 12:00:00 AM
76
77 t.setTime( 13, 27, 6 ); // change time
78
79 Set data members using
// output Time object t's new values
80 publicismember
cout << "\n\nUniversal time after setTime "; function.
81 t.printUniversal(); // 13:27:06
82
Attempt to set data members
83 cout << "\nStandard time after setTime is ";
to invalid values using
84 t.printStandard(); // 1:27:06 PM
85
public member function.
86 t.setTime( 99, 99, 99 ); // attempt invalid settings
87
88 // output t's values after specifying invalid values
89 cout << "\n\nAfter attempting invalid settings:"
90 << "\nUniversal time: ";
91 t.printUniversal(); // 00:00:00
92

 2003 Prentice Hall, Inc.


All rights reserved.
12
93 cout << "\nStandard time: ";
94 t.printStandard(); // 12:00:00 AM
Outline
95 cout << endl;
96
fig06_03.cpp
97 return 0;
(5 of 5)
98
99 } // end main
fig06_03.cpp
The initial universal time is 00:00:00 output (1 of 1)
The initial standard time is 12:00:00 AM
 
Universal time after setTime is 13:27:06
Standard time after setTime is 1:27:06 PM
Data members set to 0 after
 
attempting invalid settings.
After attempting invalid settings:
Universal time: 00:00:00
Standard time: 12:00:00 AM

 2003 Prentice Hall, Inc.


All rights reserved.
13
6.5 Implementing a Time Abstract Data Type
with a class
• Advantages of using classes
– Simplify programming
– Interfaces
• Hide implementation
– Software reuse
• Composition (aggregation)
– Class objects included as members of other classes
• Inheritance
– New classes derived from old

 2003 Prentice Hall, Inc. All rights reserved.


14

6.6 Class Scope and Accessing Class Members

• Class scope
– Data members, member functions
– Within class scope
• Class members
– Immediately accessible by all member functions
– Referenced by name
– Outside class scope
• Referenced through handles
– Object name, reference to object, pointer to object
• File scope
– Nonmember functions

 2003 Prentice Hall, Inc. All rights reserved.


15

6.6 Class Scope and Accessing Class Members

• Function scope
– Variables declared in member function
– Only known to function
– Variables with same name as class-scope variables
• Class-scope variable “hidden”
– Access with scope resolution operator (::)
ClassName::classVariableName
– Variables only known to function they are defined in
– Variables are destroyed after function completion

 2003 Prentice Hall, Inc. All rights reserved.


16

6.6 Class Scope and Accessing Class Members

• Operators to access class members


– Identical to those for structs
– Dot member selection operator (.)
• Object
• Reference to object
– Arrow member selection operator (->)
• Pointers

 2003 Prentice Hall, Inc. All rights reserved.


17
1 // Fig. 6.4: fig06_04.cpp
2 // Demonstrating the class member access operators . and ->
Outline
3 //
4 // CAUTION: IN FUTURE EXAMPLES WE AVOID PUBLIC DATA!
fig06_04.cpp
5 #include <iostream>
(1 of 2)
6
7 using std::cout;
8 using std::endl;
9
10 // class Count definition
11 class Count { Data member x public to
12 illustrate class member access
13 public: operators; typically data
14 int x; members private.
15
16 void print()
17 {
18 cout << x << endl;
19 }
20
21 }; // end class Count
22

 2003 Prentice Hall, Inc.


All rights reserved.
18
23 int main()
24 {
Outline
25 Count counter; // create counter object
26 Count *counterPtr = &counter; // create pointer to counter
fig06_04.cpp
27 Count &counterRef = counter; // Use dot reference
create member selection
to counter
(2 of 2)
28 operator for counter object.
29 cout << "Assign 1 to x and print using the object's name: ";
30 counter.x = 1; // assign 1 to data member x fig06_04.cpp
31 counter.print(); // call member Use dot member
function print selection output (1 of 1)
32 operator for counterRef
33 cout << "Assign 2 to x and print reference
using to object.";
a reference:
34 counterRef.x = 2; // assign 2 to data member x
35 Use arrowprint
counterRef.print(); // call member function member selection
36 operator for counterPtr
37 cout << "Assign 3 to x and print pointer
using to object.
a pointer: ";
38 counterPtr->x = 3; // assign 3 to data member x
39 counterPtr->print(); // call member function print
40
41 return 0;
42
43 } // end main

Assign 1 to x and print using the object's name: 1


Assign 2 to x and print using a reference: 2
Assign 3 to x and print using a pointer: 3

 2003 Prentice Hall, Inc.


All rights reserved.
19

6.8 Controlling Access to Members

• Access modes
– private
• Default access mode
• Accessible to member functions and friends
– public
• Accessible to any function in program with handle to class
object
– protected
• Chapter 9

 2003 Prentice Hall, Inc. All rights reserved.


20
1 // Fig. 6.8: fig06_08.cpp
2 // Demonstrate errors resulting from attempts
Outline
3 // to access private class members.
4 #include <iostream>
fig06_08.cpp
5
(1 of 1)
6 using std::cout;
7
8 // include definition of class Time from time1.h
9 #include "time1.h"
10
11 int main()
12 {
13 Time t; // create Time object
Recall data member hour is
14 private; attempts to access
15 private members results in
16 error. is not accessible
t.hour = 7; // error: 'Time::hour' Data member minute also
17 private; attempts to access
18 // error: 'Time::minute' is not accessible private members produces
19 cout << "minute = " << t.minute; error.
20
21 return 0;
22
23 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
21
D:\cpphtp4_examples\ch06\Fig6_06\Fig06_06.cpp(16) : error C2248:
'hour' : cannot access private member declared in class 'Time' Outline
D:\cpphtp4_examples\ch06\Fig6_06\Fig06_06.cpp(19) : error C2248:
'minute' : cannot access private member declared in class 'Time'
fig06_08.cpp
output (1 of 1)
Errors produced by
attempting to access
private members.

 2003 Prentice Hall, Inc.


All rights reserved.
22

6.8 Controlling Access to Members

• Class member access


– Default private
– Explicitly set to private, public, protected
• struct member access
– Default public
– Explicitly set to private, public, protected
• Access to class’s private data
– Controlled with access functions (accessor methods)
• Get function
– Read private data
• Set function
– Modify private data

 2003 Prentice Hall, Inc. All rights reserved.


23

6.9 Access Functions and Utility Functions

• Access functions
– public
– Read/display data
– Predicate functions
• Check conditions
• Utility functions (helper functions)
– private
– Support operation of public member functions
– Not intended for direct client use

 2003 Prentice Hall, Inc. All rights reserved.


24
1 // Fig. 6.9: salesp.h
2 // SalesPerson class definition.
Outline
3 // Member functions defined in salesp.cpp.
4 #ifndef SALESP_H
salesp.h (1 of 1)
5 #define SALESP_H
6
7 class SalesPerson {
8 Set access function
15 private: performs validity
16 double totalAnnualSales(); // utility checks.
function
17 double sales[ 12 ]; // 12 monthly sales figures
18
19
private utility
function.

 2003 Prentice Hall, Inc.


All rights reserved.
25
1 // Fig. 6.10: salesp.cpp
2 // Member functions for class SalesPerson.
Outline
3 #include <iostream>
4
salesp.cpp (1 of 3)
5 using std::cout;
6 using std::cin;
7 using std::endl;
8 using std::fixed;
9
10 #include <iomanip>
11
12 using std::setprecision;
13
14 // include SalesPerson class definition from salesp.h
15 #include "salesp.h"
16
17 // initialize elements of array sales to 0.0
18 SalesPerson::SalesPerson()
19 {
20 for ( int i = 0; i < 12; i++ )
21 sales[ i ] = 0.0;
22
23 } // end SalesPerson constructor
24

 2003 Prentice Hall, Inc.


All rights reserved.
26
25 public:
// get 12 sales figures from the user at the keyboard
Outline
26 void getSalesFromUser()
27 {
salesp.cpp (2 of 3)
28 double salesFigure;
29
30 for ( int i = 1; i <= 12; i++ ) {
31 cout << "Enter sales amount for month " << i << ": ";
32 cin >> salesFigure;
33 setSales( i, salesFigure );
34
35 } // end for
36
37 } // end function getSalesFromUser
38
39 // set one of the 12 monthly sales figures; function subtracts
Set access function performs
40 // one from month value for proper subscript in sales array
validity checks.
41 void setSales( int month, double amount )
42 {
43 // test for valid month and amount values
44 if ( month >= 1 && month <= 12 && amount > 0 )
45 sales[ month - 1 ] = amount; // adjust for subscripts 0-11
46
47 else // invalid month or amount value
48 cout << "Invalid month or sales figure" << endl;

 2003 Prentice Hall, Inc.


All rights reserved.
27
49
50 } // end function setSales
Outline
51
52 // print total annual sales (with help of utility function)
salesp.cpp (3 of 3)
53 void printAnnualSales()
54 {
55 cout << setprecision( 2 ) << fixed
56 << "\nThe total annual sales are: $"
57 << totalAnnualSales() << endl; // call utility function
58
59 } // end function printAnnualSales
60 private utility function to
61 // private utility function to total annual sales help function
62 double totalAnnualSales() printAnnualSales;
63 { encapsulates logic of
64 double total = 0.0; // initialize total manipulating sales array.
65
66 for ( int i = 0; i < 12; i++ ) // summarize sales results
67 total += sales[ i ];
68
69 return total;
70
•} // end function totalAnnualSales
}; // end class SalesPerson
20
21 #endif

 2003 Prentice Hall, Inc.


All rights reserved.
28
1
2 // Demonstrating a utility function.
Outline
3 // Compile this program with salesp.cpp
4
fig06_11.cpp
5 // include SalesPerson class definition from salesp.h
(1 of 1)
7
8 int main()
9 { Simple sequence of member
10 SalesPerson s; // create SalesPerson object sfunction calls; logic
11
encapsulated in member
12 s.getSalesFromUser(); // note simple sequential code; no
functions.
13 s.printAnnualSales(); // control structures in main
14
15 return 0;
16
17 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
29
Enter sales amount for month 1: 5314.76
Enter sales amount for month 2: 4292.38
Outline
Enter sales amount for month 3: 4589.83
Enter sales amount for month 4: 5534.03
fig06_11.cpp
Enter sales amount for month 5: 4376.34
output (1 of 1)
Enter sales amount for month 6: 5698.45
Enter sales amount for month 7: 4439.22
Enter sales amount for month 8: 5893.57
Enter sales amount for month 9: 4909.67
Enter sales amount for month 10: 5123.45
Enter sales amount for month 11: 4024.97
Enter sales amount for month 12: 5923.92
 
The total annual sales are: $60120.59

 2003 Prentice Hall, Inc.


All rights reserved.
30

6.10 Initializing Class Objects: Constructors


• Constructors
– Initialize data members
• Or can set later
– Same name as class
– No return type
• Initializers
– Passed as arguments to constructor
– In parentheses to right of class name before semicolon
Class-type ObjectName( value1,value2,…);

 2003 Prentice Hall, Inc. All rights reserved.


31
6.11 Using Default Arguments with
Constructors
• Constructors
– Can specify default arguments
– Default constructors
• Defaults all arguments
OR
• Explicitly requires no arguments
• Can be invoked with no arguments
• Only one per class

 2003 Prentice Hall, Inc. All rights reserved.


32
1 // Fig. 6.12: time2.h
2 // Declaration of class Time.
Outline
3 // Member functions defined in time2.cpp.
4
time2.h (1 of 1)
5 // prevent multiple inclusions of header file
6 #ifndef TIME2_H
7 #define TIME2_H
7 #include <iomanip>
8
9 using std::setfill;
Default constructor specifying
10 using std::setw; all arguments.
9 // Time abstract data type definition
10 class Time {
11
18 private:
19 int hour; // 0 - 23 (24-hour clock format)
20 int minute; // 0 - 59
21 int second; // 0 - 59
22

 2003 Prentice Hall, Inc.


All rights reserved.
33
11
12 // include definition of class Time from time2.h
Outline
13 #include "time2.h"
14
time2.cpp (1 of 3)
15 // Time constructor initializes each data member to zero;
16 // ensures all Time objects start in a consistent state
17 Time( int hr, int min, int sec )
18 {
19 setTime( hr, min, sec ); // validate and set time
20
21 } // end Time constructor
22

Constructor calls setTime


to validate passed (or default)
values.

 2003 Prentice Hall, Inc.


All rights reserved.
34
23 // set new Time value using universal time, perform validity
24 // checks on the data values and set invalid values to zero
Outline
25 void setTime( int h, int m, int s )
26 {
time2.cpp (2 of 3)
27 hour = ( h >= 0 && h < 24 ) ? h : 0;
28 minute = ( m >= 0 && m < 60 ) ? m : 0;
29 second = ( s >= 0 && s < 60 ) ? s : 0;
30
31 } // end function setTime
32
33 // print Time in universal format
34 void printUniversal()
35 {
36 cout << setfill( '0' ) << setw( 2 ) << hour << ":"
37 << setw( 2 ) << minute << ":"
38 << setw( 2 ) << second;
39
40 } // end function printUniversal
41

 2003 Prentice Hall, Inc.


All rights reserved.
35
42 // print Time in standard format
43 void Time::printStandard()
Outline
44 {
45 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
time2.cpp (3 of 3)
46 << ":" << setfill( '0' ) << setw( 2 ) << minute
47 << ":" << setw( 2 ) << second
48 << ( hour < 12 ? " AM" : " PM" );
49
•} // end function printStandard

23 }; // end class Time


24
25 #endif

 2003 Prentice Hall, Inc.


All rights reserved.
36
4
5 using std::cout;
Outline
6 using std::endl;
7
fig06_14.cpp
8 int main()
(1 of 2)
12 {
13 Time t1; // all arguments defaulted
14 Time t2( 2 ); // minute and second defaulted
15 Time t3( 21, 34 ); // second defaulted
16 Time t4( 12, 25, 42 ); // all values specified
17 Time t5( 27, 74, 99 ); // all bad values specified
18 Initialize Time
19 cout << "Constructed with:\n\n" objects using
20 << "all default arguments:\n "; default arguments.
21 t1.printUniversal(); // 00:00:00
22 cout << "\n ";
23 t1.printStandard(); // 12:00:00 AM
24
Initialize Time object with
invalid values; validity
checking will set values to 0.

 2003 Prentice Hall, Inc.


All rights reserved.
37
25 cout << "\n\nhour specified; default minute and second:\n ";
26 t2.printUniversal(); // 02:00:00
Outline
27 cout << "\n ";
28 t2.printStandard(); // 2:00:00 AM
fig06_14.cpp
29
(2 of 2)
30 cout << "\n\nhour and minute specified; default second:\n ";
31 t3.printUniversal(); // 21:34:00
32 cout << "\n ";
33 t3.printStandard(); // 9:34:00 PM
34
35 cout << "\n\nhour, minute, and second specified:\n ";
36 t4.printUniversal(); // 12:25:42
37 cout << "\n ";
38 t4.printStandard(); // 12:25:42 PM
39 t5 constructed with invalid
40 cout << "\n\nall invalid values specified:\n "; arguments; values set to 0.
41 t5.printUniversal(); // 00:00:00
42 cout << "\n ";
43 t5.printStandard(); // 12:00:00 AM
44 cout << endl;
45
46 return 0;
47
48 } // end main

 2003 Prentice Hall, Inc.


All rights reserved.
38
Constructed with:
 
Outline
all default arguments:
00:00:00
fig06_14.cpp
12:00:00 AM
output (1 of 1)
 
hour specified; default minute and second:
02:00:00
2:00:00 AM
 
hour and minute specified; default second:
21:34:00
9:34:00 PM
 
hour, minute, and second specified:
12:25:42
12:25:42 PM
 
all invalid values specified:
00:00:00
12:00:00 AM

 2003 Prentice Hall, Inc.


All rights reserved.
39

6.14 Using Set and Get Functions

• Set functions
– Perform validity checks before modifying private data
– Notify if invalid values
– Indicate with return values
• Get functions
– “Query” functions
– Control format of data returned

 2003 Prentice Hall, Inc. All rights reserved.


40
1 // Fig. 6.18: time3.h
2 // Declaration of class Time.
Outline
3 // Member functions defined in time3.cpp
4
time3.h (1 of 2)
5 // prevent multiple inclusions of header file
6 #ifndef TIME3_H
7 #define TIME3_H
8
9 class Time {
10
11 public:
12 Time( int = 0, int = 0, int = 0 ); // default constructor
13 Set functions.
14 // set functions
15 void setTime( int, int, int ); // set hour, minute, second
16 void setHour( int ); // set hour
17 void setMinute( int ); // set minute
18 void setSecond( int ); // set second
19
Get functions.
20 // get functions
21 int getHour(); // return hour
22 int getMinute(); // return minute
23 int getSecond(); // return second
24

 2003 Prentice Hall, Inc.


All rights reserved.
41
25 void printUniversal(); // output universal-time format
26 void printStandard(); // output standard-time format
Outline
27
28 private:
time3.h (2 of 2)
29 int hour; // 0 - 23 (24-hour clock format)
30 int minute; // 0 - 59
31 int second; // 0 - 59
32
33 }; // end clas Time
34
35 #endif

 2003 Prentice Hall, Inc.


All rights reserved.
42
1 // Fig. 6.19: time3.cpp
2 // Member-function definitions for Time class.
Outline
3 #include <iostream>
4
time3.cpp (1 of 4)
5 using std::cout;
6
7 #include <iomanip>
8
9 using std::setfill;
10 using std::setw;
11
12 // include definition of class Time from time3.h
13 #include "time3.h"
14
15 // constructor function to initialize private data;
16 // calls member function setTime to set variables;
17 // default values are 0 (see class definition)
18 Time::Time( int hr, int min, int sec )
19 {
20 setTime( hr, min, sec );
21
22 } // end Time constructor
23

 2003 Prentice Hall, Inc.


All rights reserved.
43
24 // set hour, minute and second values
25 void Time::setTime( int h, int m, int s )
Outline
26 {
27 setHour( h );
time3.cpp (2 of 4)
28 setMinute( m );
29 setSecond( s );
30 Call set functions to perform
31 } // end function setTime validity checking.
32
33 // set hour value
34 void Time::setHour( int h )
35 {
36 hour = ( h >= 0 && h < 24 ) ? h : 0;
37
38 } // end function setHour
39
Set functions perform validity
40 // set minute value
checks before modifying data.
41 void Time::setMinute( int m )
42 {
43 minute = ( m >= 0 && m < 60 ) ? m : 0;
44
45 } // end function setMinute
46

 2003 Prentice Hall, Inc.


All rights reserved.
Set function performs validity 44
47 // set second value
48 void Time::setSecond( int s ) checksbefore modifying data. Outline
49 {
50 second = ( s >= 0 && s < 60 ) ? s : 0;
time3.cpp (3 of 4)
51
52 } // end function setSecond
53
54 // return hour value
55 int Time::getHour()
56 {
57 return hour;
58
59 } // end function getHour
Get functions allow client to
60
read data.
61 // return minute value
62 int Time::getMinute()
63 {
64 return minute;
65
66 } // end function getMinute
67

 2003 Prentice Hall, Inc.


All rights reserved.
45
68 // return second value
69 int Time::getSecond()
Outline
70 {
71 return second;
time3.cpp (4 of 4)
72
73 } // end function getSecond Get function allows client to
74 read data.
75 // print Time in universal format
76 void Time::printUniversal()
77 {
78 cout << setfill( '0' ) << setw( 2 ) << hour << ":"
79 << setw( 2 ) << minute << ":"
80 << setw( 2 ) << second;
81
82 } // end function printUniversal
83
84 // print Time in standard format
85 void Time::printStandard()
86 {
87 cout << ( ( hour == 0 || hour == 12 ) ? 12 : hour % 12 )
88 << ":" << setfill( '0' ) << setw( 2 ) << minute
89 << ":" << setw( 2 ) << second
90 << ( hour < 12 ? " AM" : " PM" );
91
92 } // end function printStandard

 2003 Prentice Hall, Inc.


All rights reserved.
46
1 // Fig. 6.20: fig06_20.cpp
2 // Demonstrating the Time class set and get functions
Outline
3 #include <iostream>
4
fig06_20.cpp
5 using std::cout;
(1 of 3)
6 using std::endl;
7
8 // include definition of class Time from time3.h
9 #include "time3.h"
10
11 void incrementMinutes( Time &, const int ); // prototype
12
13 int main() Invoke set functions to set
14 {
valid values.
15 Time t; // create Time object
16
17 // set time using individual set functions
18 t.setHour( 17 ); // set hour to valid value
19 t.setMinute( 34 ); // set minute to valid value
20 t.setSecond( 25 ); // set second to valid value
21

 2003 Prentice Hall, Inc.


All rights reserved.
47
22 // use get functions to obtain hour, minute and second
23 cout << "Result of setting all valid values:\n"
Outline
24 << " Hour: " << t.getHour()
25 << " Minute: " << t.getMinute()
Attempt to set invalid values
26 << " Second: " << t.getSecond(); using set functions. fig06_20.cpp
(2 of 3)
27
28 // set time using individual set functions
29 t.setHour( 234 ); // invalid hour set to 0
30 t.setMinute( 43 ); // set minute to valid value
31 t.setSecond( 6373 ); // invalid second set to 0 Invalid values result in setting
32
data members to 0.
33 // display hour, minute and second after setting
34 // invalid hour and second values
35 cout << "\n\nResult of attempting to set invalid hour and"
36 << " second:\n Hour: " << t.getHour()
Modify data members using
37 << " Minute: " << t.getMinute()
38 << " Second: " << t.getSecond() << "\n\n";
function setTime.
39
40 t.setTime( 11, 58, 0 ); // set time
41 incrementMinutes( t, 3 ); // increment t's minute by 3
42
43 return 0;
44
45 } // end main
46

 2003 Prentice Hall, Inc.


All rights reserved.
48
47 // add specified number of minutes to a Time object
48 void incrementMinutes( Time &tt, const int count )
Outline
49 {
50 cout << "Incrementing minute " << count
fig06_20.cpp
51 << " times:\nStart time: ";
Using get functions to 3)
(3 of read
52 tt.printStandard();
53
data and set functions to
54 for ( int i = 0; i < count; i++ ) { modify data.
55 tt.setMinute( ( tt.getMinute() + 1 ) % 60 );
56
57 if ( tt.getMinute() == 0 )
58 tt.setHour( ( tt.getHour() + 1 ) % 24);
59
60 cout << "\nminute + 1: ";
61 tt.printStandard();
62
63 } // end for
64
65 cout << endl;
66
67 } // end function incrementMinutes

 2003 Prentice Hall, Inc.


All rights reserved.
49
Result of setting all valid values:
Hour: 17 Minute: 34 Second: 25
Outline
 
Result of attempting to set invalid hour and second:
fig06_20.cpp
Hour: 0 Minute: 43 Second: 0
output (1 of 1)
 
Incrementing minute 3 times:
Start time: 11:58:00 AM
minute + 1: 11:59:00 AM
Attempting to set data
minute + 1: 12:00:00 PM members with invalid values
minute + 1: 12:01:00 PM results in error message and
members set to 0.

 2003 Prentice Hall, Inc.


All rights reserved.
50

6.16 Default Memberwise Assignment

• Assigning objects
– Assignment operator (=)
• Can assign one object to another of same type
• Default: memberwise assignment
– Each right member assigned individually to left member
• Passing, returning objects
– Objects passed as function arguments
– Objects returned from functions
– Default: pass-by-value
• Copy of object passed, returned
– Copy constructor
• Copy original values into new object

 2003 Prentice Hall, Inc. All rights reserved.

You might also like