Download presentation
Presentation is loading. Please wait.
Published byAmberlynn Hampton Modified over 8 years ago
1
Spring 2008 Mark Fontenot mfonten@engr.smu.edu CSE 2341 - Honors Principles of Computer Science I Note Set 6 1
2
Quick Look 2 Object Composition
3
Relationships 3 Different kinds of relationships can exist between classes “is a” (inheritance – more on this later) “has a” (composition/aggregation) “uses a” (association)
4
Object Composition 4 Object composition occurs when a class contains an instance of another class Creates a “has a” relationship between classes
5
Object Composition 5 class Date { private: //private //members public: //public //members }; class Employee { private: char lName[25]; char fName[25]; Date birthDate; Date hireDate; public: //public members };
6
Date Class 6 #ifndefDATE1_H #defineDATE1_H class Date { public: Date(int = 1, int = 1, int = 1900); void print ( ) const; ~Date( ); private: int month;// 1-12 int day;// 1-31 based on month int year;// any year int checkDay(int); }; #endif
7
Date Class 7 Date::Date(int mn, int dy, int yr) { if (mn > 0 && mn <= 12) month = mn; else { month = 1; cout << “Month 1” << mn << “ invalid.Set to month 1.” << endl; } year = yr;// could also check day = checkDay(dy);// validate the day cout << “Date object constructor for date ”; print( ); cout << endl; }
8
Date Class 8 int Date::checkDay(int testDay) { static int daysPerMonth[13] = {0, 31, 28, 31, 30 31, 30, 31, 31, 30, 31, 30, 31}; if (testDay > 0 && testDay <= daysPerMonth[month]) return testDay; if (month == 2 && testDay == 29 && (year % 400 == 0||(year % 4 == 0 && year % 100 !=0))) return testDay; cout << “Day” << testDay << “ invalid. Set to day 1.”<<endl; return 1; }
9
Date Class 9 //Print Date object in form month/day/year void Date::print() const { cout << month << ‘/’ << day << ‘/’ << year; } Date::~Date() { cout << “Date object destructor for date ”; print(); cout << endl; }
10
Employee Class 10 // emply1.h #ifndef EMPLY1_H #define EMPLY1_H #include "date1.h“ class Employee { public: Employee(char *, char *, int, int, int, int, int, int ); void print() const; ~Employee(); private: char firstName[ 25 ]; char lastName[ 25 ]; const Date birthDate; const Date hireDate; }; #endif
11
Employee Class 11 // Member function definitions for Employee class. #include using namespace std; #include #include "emply1.h" #include "date1.h” Employee::Employee( char *fname, char *lname, int bmonth, int bday, int byear, int hmonth, int hday, int hyear ) : birthDate( bmonth, bday, byear ), hireDate( hmonth, hday, hyear ) // constructor of date class called twice: // once for the birthDate object // once for the hireDate object { // body of constructor
12
Employee Constructor 12 Employee::Employee( char *fname, char *lname, int bmonth, int bday, int byear, int hmonth, int hday, int hyear ) :birthDate( bmonth, bday, byear ), hireDate( hmonth, hday, hyear ) { int length = strlen( fname ); length = ( length < 25 ? length : 24 ); strncpy( firstName, fname, length ); length = strlen( lname ); length = ( length < 25 ? length : 24 ); strncpy( lastName, lname, length ); cout << "Employee object constructor: “ << firstName << ' ' << lastName << endl; }
13
Employee Class 13 void Employee::print() const { cout << lastName << ", " << firstName << "\nHired: "; hireDate.print(); cout << " Birth date: "; birthDate.print(); cout << endl; } Employee::~Employee() { cout << "Employee object destructor: " << lastName << ", " << firstName << endl; }
14
Sample Driver 14 #include using namespace std; #include "emply1.h“ int main() { Employee e( "Bob", "Jones", 7, 24, 1949, 3, 12, 1988 ); e.print(); Date d( 14, 35, 1994 ); cout << endl; return 0; } for birthDatefor hireDate
15
has - a 15 Aggregation/Composition one object contains another object car has a motor human has a brain Robot has an arm
16
aggregation 16 class car { public://stuff private: Motor myMotor; }; class human { public://stuff private: Brain myBrain; };
17
is – a 17 is a - relationship that represents inheritance/generalization (class derivation) For example: Helicopter is a vehicle Train is a vehicle Truck is a vehicle Plane is a vehicle Motorcycle is a vehicle
18
Inheritance Diagram 18 CARHELICOPTER Vehicle TRAIN
19
Uses A Relationship 19 An operation of class A receives or returns an object of class B In the process of an operation of class A, an object of class B must be inspected or created Objects of class A contain a reference to objects of class B
20
Identify Relationships 20 Sun, Planet__________ Elevator, Rider__________ Date, Person__________ Person, Employee__________ Circle, Point__________ Manager, Employee__________ Triangle, Rectangle__________ Computer, Keyboard__________ Computer, Person__________ Computer, Laptop__________
21
Two Types of Inheritance 21 BASE1 BASE2BASE3 DerivedA DerivedC DerivedB DerivedD Single Multiple
22
Draw an Inheritance Diagram 22 Person Student Name Address Professor
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.