A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,
description
Transcript of A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,
![Page 1: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/1.jpg)
CHAPTER 1
CLASSES IN C++
![Page 2: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/2.jpg)
A CLASS CONSISTS OF VARIABLES,CALLED FIELDS, TOGETHER WITHFUNCTIONS, CALLED METHODS, THAT ACT ON THOSE FIELDS.
![Page 3: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/3.jpg)
class MyClass{
public:MyClass( ){
...} // default constructorbool myMethod1 (int score){
...} // method myMethod1
private:string myField1;int myField2;
} // class MyClass
![Page 4: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/4.jpg)
AN OBJECT IS A VARIABLE WHOSETYPE IS A CLASS.
AN OBJECT HAS THE FIELDS ANDCAN CALL THE METHODS OF ITSCLASS.
AN OBJECT IS SOMETIMES CALLEDAN INSTANCE OF ITS CLASS.
![Page 5: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/5.jpg)
MyClass myObject1, myObject2;
if (myObject1.myMethod1 (47))cout << myObject2.myMethod1 (8);
![Page 6: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/6.jpg)
USER’S VIEW OF A CLASS:
METHOD INTERFACES
(= PRECONDITION + POSTCONDITION
+ METHOD HEADING)
DEVELOPER’S VIEW OF A CLASS:
FIELDS AND METHOD DEFINITIONS
![Page 7: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/7.jpg)
USER’S VIEW:public class FullName{
// Postcondition: This FullName object has been// initialized from s.public FullName (String s);
// Precondition: This FullName object contains// at least one blank.// Postcondition: The String of characters before// the first blank in this FullName// object has been returned.public String firstName( );
} // class FullName
![Page 8: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/8.jpg)
DEVELOPER’S VIEW:class FullName{ public: FullName (string s) { fullName = s; } string firstName() { blankPos1 = fullName.find (BLANK); return fullName.substr (0, blankPos1); } // method firstName private: int blankPos1; string fullName; const static char BLANK = ' '; // const static OK for integer types}; // class FullName
![Page 9: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/9.jpg)
PRINCIPLE OF DATA ABSTRACTION:
A USER’S CODE SHOULD NOTACCESS THE IMPLEMENTATIONDETAILS OF THE CLASS USED.
![Page 10: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/10.jpg)
BEST-PAID EMPLOYEE IN A COMPANY?
CREATE A CLASS CALLED Employee.
THE INFORMATION AVAILABLE ON EACH EMPLOYEE CONSISTS OF THE EMPLOYEE’S NAME AND GROSS PAY.
![Page 11: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/11.jpg)
THE Employee CLASS
USER’S VIEW
![Page 12: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/12.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: this Employee's name has been set to // “” and gross pay to 0.00. Employee( );
![Page 13: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/13.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: This Employee's name has been set to // “” and gross pay to 0.00. Employee( );
NOTE: IN THE ABOVE POSTCONDITION, AND IN
THE POSTCONDITIONS THAT FOLLOW, “this
Employee” REFERS TO THE CALLING OBJECT: THE
OBJECT THAT CALLED THE METHOD.
![Page 14: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/14.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: The name and gross pay of this // Employee been read in. void readInto( );
![Page 15: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/15.jpg)
THE Employee CLASS: USER’S VIEW// Postcondition: true has been returned if this // Employee is the sentinel. Otherwise, // false has been returned. bool isSentinel( ) const;
NOTE: THE RESERVED WORD const AT THE END
OF THE METHOD HEADING MEANS THAT THE
DEFINITION OF THE METHOD IS NOT ALLOWED
TO MODIFY THE CALLING OBJECT.
![Page 16: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/16.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: true has been returned if this // Employee's gross pay is greater than// that of otherEmployee. Otherwise, false // has been returned. bool makesMoreThan (const Employee& otherEmployee) const;
![Page 17: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/17.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: true has been returned if this // Employee's gross pay is greater than// that of otherEmployee. Otherwise, false // has been returned. bool makesMoreThan (const Employee& otherEmployee) const;
DEFINITION NOT ADDRESS OF ARGUMENT ALLOWED TO MODIFY SENT, NOT A COPYARGUMENT OF ARGUMENT(PROVIDES SECURITY) (SAVES TIME AND SPACE)
![Page 18: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/18.jpg)
THE Employee CLASS: USER’S VIEW
// Postcondition: this Employee contains a copy of // otherEmployee. void getCopyOf (const Employee& otherEmployee);
// Postcondition: this Employee's name and gross pay // have been written out. void printOut( ) const;
![Page 19: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/19.jpg)
Employee OBJECTSEmployee employee1, employee2;
employee1.readInto( );
employee2.readInto( );
if (employee1.makesMoreThan (employee2))employee1.printOut( );
elseemployee2.printOut( );
![Page 20: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/20.jpg)
THE Employee CLASS: DEVELOPER’S VIEW
employee1.h (THE HEADER FILE)
#ifndef EMPLOYEE#define EMPLOYEE#include <string> // declares string classusing namespace std;
class Employee{
![Page 21: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/21.jpg)
THE Employee CLASS: DEVELOPER’S VIEW
employee1.h (continued) public:
// Postcondition: this employee's name has // been set to "" and gross pay
// to 0.00. Employee( );
// method interfaces for other methods
![Page 22: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/22.jpg)
THE Employee CLASS: DEVELOPER’S VIEW
employee1.h (continued) private: string name; double grossPay; const static double
GROSS_PAY_SENTINEL; const static string EMPTY_STRING; const static string NAME_SENTINEL;
}; // Employee#endif
![Page 23: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/23.jpg)
THE Employee CLASS: DEVELOPER’S VIEW
employee1.cpp (THE SOURCE FILE )
#include <iostream> #include <iomanip> // declares output formatting objects#include "employee1.h" // declares Employee class
![Page 24: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/24.jpg)
THE Employee CLASS: DEVELOPER’S VIEW
employee1.cpp (continued )
Employee::Employee( ) { name = EMPTY_STRING; grossPay = 0.00;} // default constructor
![Page 25: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/25.jpg)
scope-resolution employee1.cpp (continued ) operator (the readInto method in
void Employee::readInto( ) the Employee class) { const string NAME_AND_PAY_PROMPT = "Please enter a name and gross pay, to quit, enter ";
cout << NAME_AND_PAY_PROMPT << NAME_SENTINEL << " "
<< GROSS_PAY_SENTINEL; cin >> name >> grossPay; } // readInto
![Page 26: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/26.jpg)
employee1.cpp (continued ) // definitions of other employee methods ...
const string Employee::EMPTY_STRING = "";const string Employee::NAME_SENTINEL = "*";const double Employee::GROSS_PAY_SENTINEL =
-1.0;
![Page 27: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/27.jpg)
APPLICATION:
FIND THE BEST PAID EMPLOYEE
IN A COMPANY.
![Page 28: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/28.jpg)
The Company Class: User’s View
// Postcondition: this Company has been initialized.Company( );
// Postcondition: this Company’s best‑paid employee// has been determined.void findBestPaid( ); // Postcondition: this Company’s best‑paid employee// has been printed out.void printBestPaid( ) const;
![Page 29: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/29.jpg)
THE Company CLASS: DEVELOPER’S VIEW
SEE LAB 1
![Page 30: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/30.jpg)
EXERCISE: TO GET THINGS STARTED,
THE main FUNCTION MUST DEFINE A
Company OBJECT. PROVIDE THAT
DEFINITION. WHAT FILE (employee1.h,
employee1.cpp, company1.h, company1.cpp)
MUST BE INCLUDED IN THE CLASS
THAT HAS THE main FUNCTION?
![Page 31: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/31.jpg)
INHERITANCE
![Page 32: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/32.jpg)
INHERITANCE IS THE ABILITY TODEFINE A NEW CLASS THATINCLUDES ALL THE FIELDS ANDSOME OR ALL OF THE METHODS OFAN EXISTING CLASS.
![Page 33: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/33.jpg)
EXISTING CLASS = SUPERCLASS = BASE CLASS
NEW CLASS = SUBCLASS = DERIVED CLASS
SUPERCLASS
SUBCLASS
![Page 34: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/34.jpg)
THE SUBCLASS MAY DECLARE NEWFIELDS AND METHODS, AND MAYOVERRIDE EXISTING METHODS BYGIVING THEM METHODDEFINITIONS THAT DIFFER FROMTHOSE IN THE SUPERCLASS.
![Page 35: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/35.jpg)
EXAMPLE: FIND THE BEST-PAID HOURLY EMPLOYEE
INPUT: NAME, HOURS WORKED, PAY RATE
![Page 36: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/36.jpg)
MODIFY Employee CLASS?
![Page 37: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/37.jpg)
THE OPEN-CLOSED PRINCIPLE
EVERY CLASS SHOULD BE
OPEN: EXTENDIBLE THROUGH INHERITANCE
CLOSED: STABLE FOR EXISTING APPLICATIONS
![Page 38: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/38.jpg)
IN PARTICULAR, THE Employee
CLASS SHOULD BE STABLE FORTHE EXISTING APPLICATION OFFINDING THE BEST-PAIDEMPLOYEE IN A COMPANY.
AND EXTENDIBLE FOR THIS NEWAPPLICATION!
![Page 39: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/39.jpg)
THE NEW CLASS WILL BE
HourlyEmployee
A SUBCLASS OF Employee. WHICH
Employee METHODS WILL BE
OVERRIDDEN?
![Page 40: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/40.jpg)
// Postcondition: this HourlyEmployee's name, hours// worked and pay rate have been// read in, and the gross pay has been// calculated.void readInto( );
// Postcondition: true has been returned if this// HourlyEmployee contains the// sentinels. Otherwise, false has// been returned.bool isSentinel( ) const;
![Page 41: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/41.jpg)
THE makesMoreThan, getCopyOf and
printOut METHODS ARE UNTOUCHED,
AND MAY BE CALLED AS IS BY ANY
HourlyEmployee OBJECT
AFTER ALL, AN HourlyEmployee IS ANIS AN
Employee!
![Page 42: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/42.jpg)
WHAT FIELDS?
FOR THE NEW INFORMATION:
hoursWorked, payRate
![Page 43: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/43.jpg)
WHAT ABOUT name AND grossPay?
ACCORDING TO THE DEFINITION
OF INHERITANCE, THE HourlyEmployee
CLASS AUTOMATICALLY “INHERITS”
THESE TWO FIELDS.
BUT HOW?
![Page 44: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/44.jpg)
TO ALLOW SUBCLASS OBJECTS TO
ACCESS SUPERCLASS FIELDS, THOSE
FIELDS SHOULD BE GIVEN THE
protected LEVEL OF PROTECTION.
private IS TOO RESTRICTIVE (SUPERCLASS ONLY)
public IS TOO LAX (ANY CLASS’S CODE CAN ACCESS THE FIELD)
![Page 45: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/45.jpg)
SO, IN THE Employee CLASS, WE
CHANGE THE PROTECTION LEVEL
FOR THOSE TWO FIELDS:
protected:
string name,
double grossPay;
![Page 46: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/46.jpg)
THEN THOSE TWO FIELDS CAN BE
ACCESSED IN ANY Employee CLASS
METHOD, AND IN ANY METHOD IN ANY
SUBCLASS OF Employee.
HERE IS THE DECLARATION OF THE
HourlyEmployee CLASS (THE POST-
CONDITIONS WERE GIVEN ABOVE):
![Page 47: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/47.jpg)
class HourlyEmployee : public Employee{ public: HourlyEmployee( ); void readInto( ); bool isSentinel( ) const;
protected: int hoursWorked; double payRate;
const static int HOUR_WORKED_SENTINEL;const static double PAY_RATE_SENTINEL;
}; // HourlyEmployee
![Page 48: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/48.jpg)
THE METHOD DEFINITIONS ARE JUST
WHAT YOU WOULD EXPECT. FOR
EXAMPLE, HERE IS THE DEFINITION
OF isSentinel:
![Page 49: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/49.jpg)
bool HourlyEmployee::isSentinel( ) const { if (name == NAME_SENTINEL &&
hoursWorked == HOURS_WORKED_SENTINEL && payRate == PAY_RATE_SENTINEL) return true; return false; } // isSentinel
![Page 50: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/50.jpg)
WE CREATED THIS HourlyEmployee
CLASS FOR THE APPLICATION OF
FINDING THE BEST-PAID HOURLYEMPLOYEE IN A COMPANY. CAN THE
ORIGINAL Company CLASS USE THE
HourlyEmployee CLASS FOR THIS
NEW APPLICATION?
![Page 51: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/51.jpg)
NO, BECAUSE THE Company CLASS
MAKES NO MENTION OF AN
HourlyEmployee OBJECT. SO WE WILL
DEFINE Company2, A SUBCLASS OF
Company.
HERE IS THE DECLARATION OF THE
Company2 CLASS:
![Page 52: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/52.jpg)
class Company2 : public Company { public: // This Company2 object has been initialized. Company2( ); // Postcondition: The hourly employee with
// the highest gross pay has // been determined. Ties have // been ignored.
void findBestPaid( ); }; // Company2
![Page 53: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/53.jpg)
HOW DOES Company2’s findBestPaid
METHOD DIFFER FROM Company’s
findBestPaid METHOD? WE HAVE
HourlyEmployee employee;
INSTEAD OF
Employee employee;
![Page 54: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/54.jpg)
THIS RAISES TWO QUESTIONS
ABOUT THE FOLLOWING CODE IN
THE findBestPaid METHOD: if (employee.makesMoreThan (bestPaid))
bestPaid.getCopyOf (employee);
![Page 55: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/55.jpg)
1. HOW DID THE HourlyEmployee
OBJECT employee GET ITS grossPay
FIELD INITIALIZED? ANSWER: IMPLICITLY, THE DEFINI-
TION OF ANY SUBCLASS CONSTRUC-
TOR AUTOMATICALLY STARTS WITH
A CALL TO THE SUPERCLASS’S
DEFAULT CONSTRUCTOR.
![Page 56: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/56.jpg)
THE DEFINITION
HourlyEmployee employee;
INVOKES THE HourlyEmployeeCLASS’S DEFAULT CONSTRUCTOR,WHICH AUTOMATICALLY INVOKESTHE Employee CLASS’S DEFAULTCONSTRUCTOR, WHICHINITIALIZES grossPay (AND name).
![Page 57: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/57.jpg)
2. THE getCopyOf METHOD, WHICHIS NOT OVERRIDDEN, REQUIRESAN ARGUMENT OF TYPE Employee.BUT THE GIVEN ARGUMENT IS OFTYPE HourlyEmployee. WHY ISTHIS LEGAL?
ANSWER: BASICALLY, BECAUSE ANHourlyEmployee IS ALSO AN Employee.FORMALLY,
![Page 58: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/58.jpg)
SUBCLASS SUBSTITUTION RULE
WHENEVER A SUPERCLASSOBJECT IS CALLED FOR IN ANEXPRESSION, A SUBCLASSOBJECT MAY BE SUBSTITUTED.
![Page 59: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/59.jpg)
BECAUSE THE getCopyOf METHOD
CALLS FOR AN Employee
ARGUMENT, AN HourlyEmployee
ARGUMENT MAY BE SUBSTITUTED.
![Page 60: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/60.jpg)
OPERATOR OVERLOADING
![Page 61: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/61.jpg)
IDENTIFIERS SUCH AS getCopyOf,
makesMoreThan, readInto, AND printOut
ARE USER-DEFINED NAMES FOR
COMMON OPERATORS, NAMELY, = > >> <<
![Page 62: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/62.jpg)
C++ ALLOWS A CLASS TO
OVERLOAD OPERATORS, THAT IS,
TO DEFINE THOSE OPERATORS AS
METHODS IN THE CLASS. FOR
EXAMPLE, HERE IS THE METHOD
INTERFACE FOR THE OVERLOADED
OPERATOR > IN THE Employee
CLASS:
![Page 63: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/63.jpg)
// Postcondition: true has been returned if this // Employee's gross pay is greater than // otherEmployee's gross pay. Otherwise, // false has been returned. bool operator>(const Employee& otherEmployee)const; THE HEADING HAS operator> INSTEAD OF makesMoreThan
![Page 64: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/64.jpg)
WHEN THE OPERATOR IS INVOKED,
THE PARENTHESES ARE OMITTED. SO,
FOR EXAMPLE, WE WOULD HAVE
if (employee > bestPaid) INSTEAD OF
if (employee.makesMoreThan (bestPaid))
![Page 65: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/65.jpg)
THE BODY OF THE DEFINITION
OF operator> IN THE Employee CLASS IS
IDENTICAL TO THAT OF THE
EARLIER DEFINITION OF
makesMoreThan: bool Employee::operator> (const Employee& otherEmployee) const { return grossPay > otherEmployee.grossPay; } // overloading >
![Page 66: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/66.jpg)
THE OVERLOADING OF operator=,
TO REPLACE getCopyOf, IS SIMILAR.
SEE LAB 3. THE OVERLOADING OF THE
INSERTION OPERATOR, operator>>,
AND THE EXTRACTION OPERATOR, operator<<, IS SLIGHTLY MORE
DELICATE.
![Page 67: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/67.jpg)
LET’S CONSIDER operator<<.
THAT OPERATOR IS A METHOD IN
THE ostream CLASS, NOT IN THE
Employee CLASS.
![Page 68: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/68.jpg)
THE QUESTION IS: HOW CAN WE ALLOW AN ostream
OBJECT, SUCH AS cout, TO ACCESS
THE FIELDS IN THE Employee
CLASS WHEN cout INVOKES
operator<<?
![Page 69: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/69.jpg)
WE COULD MAKE THOSE FIELDS
public, BUT THEN ANY OBJECT IN
ANY CLASS COULD ACCESS THOSE
FIELDS, AND THIS WOULD MAKE IT
EASY FOR USERS TO VIOLATE THE
PRINCIPLE OF DATA ABSTRACTION.
![Page 70: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/70.jpg)
INSTEAD, C++ ALLOWS A GIVEN
CLASS TO SPECIFY WHICH METHODS
IN ANOTHER CLASS CAN ACCESS
ALL OF THE MEMBERS (public, private,
AND protected) OF THE GIVEN CLASS.
![Page 71: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/71.jpg)
TO ALLOW operator<< TO ACCESS
THE Employee CLASS’S MEMBERS, WE
INCLUDE THE FOLLOWING IN THE
DECLARATION OF Employee: friend ostream& operator<< (ostream& stream, const Employee& employee);
![Page 72: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/72.jpg)
THE DEFINITION OF operator<< IN THE
Employee CLASS IS ALMOST
IDENTICAL TO THE EARLIER
DEFINITION OF printOut, EXCEPT
THAT operator<< RETURNS A VALUE:
![Page 73: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/73.jpg)
ostream& operator<< (ostream& stream, const Employee& employee) {
cout << employee.name << " $" << setiosflags(ios::fixed) << setprecision (2) << employee.grossPay << endl;
return stream; } // overloading <<
![Page 74: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/74.jpg)
WHEN AN OPERATOR RETURNS
A REFERENCE TO THE SAME TYPE AS
THE CALLING OBJECT, WE CAN
CHAIN INVOCATIONS OF THE
OPERATOR.
![Page 75: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/75.jpg)
FOR EXAMPLE, cout << BEST_PAID_MESSAGE << bestPaid; THE FIRST CALL TO << PRINTS OUT A
MESSAGE AND RETURNS A
REFERENCE TO AN ostream OBJECT.
THAT OBJECT CALLS THE
BEFRIENDED VERSION OF << DEFINED
IN THE PREVIOUS SLIDES.
![Page 76: A CLASS CONSISTS OF VARIABLES, CALLED FIELDS , TOGETHER WITH FUNCTIONS , CALLED METHODS ,](https://reader035.fdocuments.us/reader035/viewer/2022062323/56815faf550346895dcea99c/html5/thumbnails/76.jpg)
EXERCISE: RECALL THE HEADING FORTHE OVERLOADED VERSION OFoperator<<:
friend ostream& operator<< (ostream& stream, const Employee& employee);
BASED ON THAT HEADING, DETERMINETHE HEADING FOR THE OVERLOADEDVERSION OF operator>> IN THE EmployeeCLASS.