180 likes | 305 Views
Review . Structured data type Array Struct. onePerson. 5000. .id 2037581 .name “John Smith” .dept ‘C’ .hour 23.6. struct Record. struct Record // declares a struct data type { // does not allocate memory
E N D
Review • Structured data type • Array • Struct
onePerson 5000 .id 2037581 .name “John Smith” .dept ‘C’ .hour 23.6
struct Record struct Record// declares a struct data type {// does not allocate memory int id ; string name ; char dept ; // struct members float hour; } ; Record onePerson; // declare variables of Record Record anotherPerson ; 3
struct DateType { int month ; // Assume 1 . . 12 int day ;// Assume 1 . . 31 int year ; // Assume 1900 . . 2050 }; struct StatisticsType { float failRate ; DateType lastServiced ; // DateType is a struct type int downDays ; } ; struct MachineRec { int idNumber ; string description ; StatisticsType history ; // StatisticsType is a struct type DateType purchaseDate ; float cost ; } ; MachineRec machine ; 4
Abstract Data Type (ADT) • a data type whose properties (domain and operations) are specified (what) independently of any particular implementation (how) FOR EXAMPLE . . .
ADT Specification Example TYPE Time DOMAIN Each Time value is a time in hours, minutes, and seconds. OPERATIONS Set the time Print the time Increment by one second Compare 2 times for equality Determine if one time is “less than” another
“10” “45” “27” 10 45 27 Several Possible Representations of Time 3 int variables 3 strings 3-element int array • actual choice of representation depends on time, space, and algorithms needed to implement operations 10 45 27
class TimeType Specification // SPECIFICATION FILE ( timetype.h ) class TimeType// declares a class data type {// does not allocate memory public : // 5 public function members void set (int hours ,int mins , int secs ) ; void increment ( ) ; void write ( ) const ; bool Equal ( Time otherTime ) const ; bool LessThan (Time otherTime ) const ; private : // 3 private data members int hour ; int mins ; int secs ; } ; 8
Use of C++ data Type class • software that uses the class is called a client • variables of the class type are called class objects or class instances • client code uses public member functions to handle its class objects
Client Code UsingTime #include “Time.h” // includes specification of the class int main ( ) { Time time1, time2 ; // declares 2 objects of TimeType int h,m,s; cout<<“Enter the hour, minute, and second\n”; cin>>h>>m>>s; time1.set (h, m, s ) ; time2 = time1; time1.increment(); time1.write(); time2.write(); if( time1.Equal(time2)) cout<<" times are equal\n"; if( time1.LessThan(time2)) cout<<"times 1 is less than time2\n"; time2.set(23, 59,55); cout<<"Increment time from 23:59:55\n"; for( int i = 1; i <=10; i++) { time2.write(); cout<<"\t"; time2.increment(); } return 0; } 10
class represents an ADT • 2 kinds of class members: data members and function members • class members are private by default • data members are generally private • function members are generally declared public • private class members can be accessed only by the class member functions (and friend functions), not by client code.
class Operations • built-in operations valid on class objects are: member selection using dot ( . ) operator , assignment to another class variable using ( = ), pass to a function as argument (by value or by reference), return as value of a function • other operations can be defined as class member functions
2 files Generally Used for class Type // SPECIFICATION FILE ( Time .h ) // Specifies the data and function members. class TimeType { public: . . . private: . . . } ; // IMPLEMENTATION FILE ( Time.cpp ) // Implements the Time member functions.
Information Hiding Class implementation details are hidden from the client’s view. This is called information hiding. Public functions of a class provide the interface between the client code and the class objects. client code abstraction barrier specification implementation
TimeClass Instance Diagrams time1 time2 Set Set Private data: hrs mins secs Private data: hrs mins secs Increment Increment 18 30 0 17 58 2 Write Write LessThan LessThan Equal Equal
Time.h client.cpp Time.cpp client.obj Time.obj client.exe Separate Compilation and Linking of Files specification file main program implementation file #include “Time.h” Compiler Compiler Linker
Avoiding Multiple Inclusion of Header Files • often several program files use the same header file containing typedef statements, constants, or class type declarations--but, it is a compile-time error to define the same identifier twice • this preprocessor directive syntax is used to avoid the compilation error that would otherwise occur from multiple uses of #include for the same header file #ifndef Preprocessor_Identifier #define Preprocessor_Identifier . . . #endif
Example Using Preprocessor Directive #ifndef // Time.hFOR COMPILATION THE CLASS DECLARATION IN // SPECIFICATION FILE FILE timetype.h WILL BE INCLUDED ONLY ONCE #ifndef TIME_H #define TIME_H // Time.cpp// client.cpp // IMPLEMENTATION FILE // Appointment program class Time { #include “Time.h” #include “Time.h” public: . . .. . . int main ( void ) { private: . . . . . . } } ; #endif