Date post: | 02-Jan-2016 |
Category: |
Documents |
Upload: | geoffrey-lyons |
View: | 221 times |
Download: | 0 times |
3
What is Inheritance?
• Inheritance allows a new class to be based on an existing class. The new class inherits the protected member variables and public functions of the class it is based on.
• Represents an “is a” relationship
4
// hardware.cpp// models hardware store inventory using inheritance#include <iostream.h>
const int LEN = 80;
class items{private:
char name[LEN]; // item namefloat price; // item priceint quantity; // number in stock
5
public:void getdata( ) //get data from user{ cout << “\n Enter item name: ”; cin >> name; cout << “ Enter price (format 12.95): ”; cin >> price; cout << “ Enter quantity in stock: ”; cin >> quantity;}void putdata( ) // display data{ cout << “\n Name: ” << name; cout << “\n Price: ” << price; cout << “\nQuantity: ” << quantity; }};
6
class pipe: public item // pipe class{private:
float length; // length of pipefloat size; // size of pipechar type[LEN]; // type of pipe
public: void getdata( ) // get data from user
{ item::getdata( );cout << “ Enter length: ”; cin >> length;cout << “ Enter size: ”; cin >> size;cout << “ Enter type: “; cin >> type;}
7
void putdata( ) // display data{item::putdata( );cout << “\n Length: ” << length;cout << “\n Size: ” << size;cout << “\n Type: ” << type;}
};
8
class light bulbs : public item{ private int watts; // wattage of light bulbs public: void getdata( ) // get data from user
{ item::getdata( ); cout << “ Enter wattage: ”; cin >> watts;}
void putdata( ) // display data{item::putdata( );cout << “\n Wattage: ” << watts;}
};
10
class paint : public item // paint class{ private:
int size: // size of pints char color[LEN]; // color of paint
public:void getdata( ) // getdata from user{ item::getdata( ); cout << “ Enter size(pints): ”; cin >> size; cout << “ Enter color: ”; cin >> color;}
void putdata( ) // display data{ item::putdata( ); cout << “\n Size: ” << size; cout << “\n Color: ” << color; }
};
11
void main( ){pipe p1; // make one itemlightbulbs b1; // of each classtools t1;paint pnt1;cout << endl;cout << “\nEnter data for pipe item”;
p1.getdata( );cout << “\nEnter data for light bulb
item”;b1.getdata( );p1.putdata( );b1.putdata( )
}
12
void main( ){pipe p1; // make one itemlightbulbs b1; // of each classtools t1;paint pnt1;cout << endl;cout << “\nEnter data for pipe item”;
p1.getdata( );cout << “\nEnter data for light bulb
item”;b1.getdata( );p1.putdata( );b1.putdata( )
}
13
Constructors and Destructors in Inheritance
Constructor Order: Constructor of any objects within the Base Class Constructor of the base class Constructor of objects within the Derived class Constructor of the Derived class
Destructor is the reverse
15
Software Engineering Observations
• A derived class cannot directly access private members of its base class.
16
Software Engineering Observations• Suppose we create an object of a derived
class where both the base class and the derived class contain objects of other classes. When an object of that derived class is created, first the constructors for the base class’ member objects execute, then the base-class constructor executes, then the constructors for the derived class’ member objects execute, then the derived class constructor executes. Destructors are called in the reverse of the order in which their corresponding constructors are called.
17
Software Engineering Observations
• The order in which member objects are constructed is the order in which those objects are declared within the class definition. The order in which the member initializers are listed does not affect construction.
18
Software Engineering Observations
• In inheritance, base-class constructors are called in the order in which inheritance is specified in the derived-class definition. The order in which the base-class constructors are specified in the derived-class member initializer list does not affect the order of construction.
19
Software Engineering Observations
• Creating a derived class does not affect it’s base class’s source code or object code; the integrity of a base class is preserved by inheritance.
20
Software Engineering Observations
• In an object-oriented system, classes are often closely related. “Factor out” common attributes and behavior and place these in a base class. Then use inheritance to form derived classes.
21
Software Engineering Observations
• A derived class contains the attributes and behaviors of its base class. A derived class can also contain additional attributes and behaviors. With inheritance, the base class can be compiled independent of the derived class. Only the derived class’s incremental attributes and behaviors need to be compiled to be able to combine these with the base class to form a derived class.
22
Software Engineering Observations
• Modifications to a base class do not require derived classes to change as long as the public and protected interfaces to the base class remain unchanged. Derived classes may, however, need to be recompiled.
23
Software Engineering Observations
• Program modifications to a class that is a member of another class do not require the enclosing class to change as long as the public interface to the member class remains unchanged. Note that the composite class may, however, need to be recompiled.
25
class Employee{ public:
Employee ( const char *, const char *); void print() const; ~ Employee();
private:
char * firstName;
char * lastName:
};
26
Employee : Employee(const char * first, const char *last){ firstName = new char [strlen(first) + 1]; assert (firstName !=0); strcpy ( firstNmae, first); lastName = new char [ strlen(last) + 1]; assert (lastName, last); }
Employee:: print(){ cout << firstName << ‘ ‘ << lastName; }
Employee:: ~Employee()
{ delete [] first Name; delete[] lastName; }
27
class HourlyWorker: public Employee
{ public : HourlyWorker (const char*, const char*, double, double); double getPay() const; void print const; private:
double wage;
double hours;
};
28
HourlyWorker:: HourlyWorker( const char * first, const char * last, double initHours, double initWage) : Employee (first, last)
{ hours = initHours;
wage = initWage; }
double HourlyWorker:: getPay () const{ return wage * hours; }
void HourlyWorker:: print() const
{ Employee::print(); cout << is an hourly worker with pay of << getPay(); }
30
Object Oriented Design
• Employee database of salaried managers, permanent hourly employees, temporary hourly employees
31
In-Class ExerciseGetting Up to Speed with
InheritanceCreate an inheritance scheme, a UML diagram , and the interfaces
for the following:
32
Getting Up to Speed with Inheritance
name name name
home phone home phone home phone
office phone office phone office phone
salary level wage wage
bonus level
reports to reports to reports to
assistant
Salaried Hrly. Perm. Hrly. Temp
33
class employee {public:
employee(char *name, char *home_phone,
char *office_phone, char *reports_to);
void show_employee(void);private:
char name[64];char home_phone[64];char office_phone[64];char reports_to[64];
};
34
class salaried : public employee {public:salaried(char *name, char *home_phone, char *office_phone, char *reports_to, float salary,float bonus_level, char *assistant);void show_salaried(void);private:float salary;float bonus_level;char assistant[64];
};
35
class hourly : public employee {public:
hourly(char *name, char *home_phone, char *office_phone, char *reports_to, float wage);
void show_hourly(void);private;
float wage;};