Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Object-Oriented Programming Using C++ CLASS 11 Honors.

Similar presentations


Presentation on theme: "1 Object-Oriented Programming Using C++ CLASS 11 Honors."— Presentation transcript:

1 1 Object-Oriented Programming Using C++ CLASS 11 Honors

2 2 Using inheritance to promote software reusability Objectives

3 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 4 // hardware.cpp // models hardware store inventory using inheritance #include const int LEN = 80; class items { private: char name[LEN]; // item name float price;// item price int quantity;// number in stock

5 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 6 class pipe: public item // pipe class { private: float length;// length of pipe float size;// size of pipe char type[LEN]; // type of pipe public: void getdata( )// get data from user { item::getdata( ); cout > length; cout > size; cout > type; }

7 7 void putdata( )// display data { item::putdata( ); cout << “\n Length: ” << length; cout << “\n Size: ” << size; cout << “\n Type: ” << type; } };

8 8 class light bulbs : public item { private int watts;// wattage of light bulbs public: void getdata( )// get data from user { item::getdata( ); cout > watts; } void putdata( )// display data { item::putdata( ); cout << “\n Wattage: ” << watts; } };

9 9 class tools : public item // tool class { // (no additional data) };

10 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 > size; cout > color; } void putdata( )// display data { item::putdata( ); cout << “\n Size: ” << size; cout << “\n Color: ” << color; } };

11 11 void main( ) { pipe p1;// make one item lightbulbs b1;// of each class tools 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 12 void main( ) { pipe p1;// make one item lightbulbs b1;// of each class tools 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 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

14 14 Points to Remember Software Engineering Observations

15 15 Software Engineering Observations A derived class cannot directly access private members of its base class.

16 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 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 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 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 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 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 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 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.

24 24 Looking at Some Examples

25 25 class Employee { public: Employee ( const char *, const char *); void print() const; ~ Employee(); private: char * firstName; char * lastName: };

26 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 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 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(); }

29 29 int main() { HourlyWorker h ( “Bob”, “Smith”, 40.0, 10.00); h.print(); return 0; }

30 30 Object Oriented Design Employee database of salaried managers, permanent hourly employees, temporary hourly employees

31 31 In-Class Exercise Getting Up to Speed with Inheritance Create an inheritance scheme, a UML diagram, and the interfaces for the following:

32 32 Getting Up to Speed with Inheritance namenamename home phonehome phonehome phone office phoneoffice phoneoffice phone salary levelwagewage bonus level reports toreports toreports to assistant Salaried Hrly. Perm. Hrly. Temp

33 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 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 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; };

36 36 Q & A


Download ppt "1 Object-Oriented Programming Using C++ CLASS 11 Honors."

Similar presentations


Ads by Google