you gotta be cool. inheritance base classes and derived classes inheritance: public, protected,...

31
You gotta be cool Programming II

Upload: kristina-burns

Post on 18-Dec-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

  • Slide 1
  • You gotta be cool
  • Slide 2
  • Inheritance Base Classes and Derived Classes Inheritance: Public, Protected, Private What is inherited from the base class? Multiple Inheritance Inheritance
  • Slide 3
  • Inheritance is a form of software reuse in which you create a class that absorbs an existing classs capabilities, then customizes or enhances them. Software reuse saves time during program development by taking advantage of proven, high-quality software. When creating a class, instead of writing completely new data members and member functions, you can specify that the new class should inherit the members of an existing class. Inheritance
  • Slide 4
  • This existing class is called the base class, and the new class is called the derived class. Other programming languages, such as Java and C#, refer to the base class as the superclass and the derived class as the subclass. A derived class represents a more specialized group of objects. Inheritance
  • Slide 5
  • C++ offers public, protected and private inheritance. In this chapter, we concentrate on public inheritance and briefly explain the other two. With public inheritance, every object of a derived class is also an object of that derived classs base class. However, baseclass objects are not objects of their derived classes. For example, if we have Vehicle as a base class and Car as a derived class, then all Cars are Vehicles, but not all Vehicles are Inheritance
  • Slide 6
  • For example, if we have Vehicle as a base class and Car as a derived class, then all Cars are Vehicles, but not all Vehicles are Carsfor example, a Vehicle could also be a Truck or a Boat. We distinguish between the is-a relationship and the has-a relationship. The is-a relationship represents inheritance. In an is-a relationship, an object of a derived class also can be treated as an object of its base classfor example, a Car is a Vehicle, so any attributes and behaviors of a Vehicle are also attributes and behaviors of a Car. Inheritance
  • Slide 7
  • Below figure lists several simple examples of base classes and derived classes. Base classes tend to be more general and derived classes tend to be more specific. Base Classes and Derived Classes
  • Slide 8
  • Because every derived-class object is an object of its base class, and one base class can have many derived classes, the set of objects represented by a base class typically is larger than the set of objects represented by any of its derived classes. For example, the base class Vehicle represents all vehicles, including cars, trucks, boats, airplanes, bicycles and so on. By contrast, derived class Car represents a smaller, more specific subset of all vehicles. Inheritance relationships form class hierarchies. Base Classes and Derived Classes
  • Slide 9
  • A base class exists in a hierarchical relationship with its derived classes. Although classes can exist independently, once theyre employed in inheritance relationships, they become affiliated with other classes. A class becomes either a base classsupplying members to other classes, a derived classinheriting its members from other classes, or both. Base Classes and Derived Classes
  • Slide 10
  • CommunityMember Class Hierarchy
  • Slide 11
  • Shape Class Hierarchy
  • Slide 12
  • To improve our understanding, can you take 5 minutes to discuss and write: A program that has 2 classes shown below with main () that excutes them with the value 4 set to width and 5 set to height for both shapes Formula for Rectangles area is (width*height) while Triangles are is (width * height / 2) Now, before we go any further Rectangle -width : Int -height : Int + area () : Int + set_values (a : Int, b: Int) Triangle -width : Int -height : Int + area () : Int + set_values (a : Int, b: Int)
  • Slide 13
  • Class Rectangle & Class Triangle
  • Slide 14
  • So there are two kinds of polygons here: rectangles and triangles. These two polygons have certain common properties, such as the values needed to calculate their areas: they both can be described simply with a height and a width (or base). This could be represented in the world of classes with a class Polygon from which we would derive the two other ones: Rectangle and Triangle: Inheritance for 2 polygons Polygon Triangl e Rectangle
  • Slide 15
  • Class Polygon, Rectangle & Class Triangle
  • Slide 16
  • The Polygon class would contain members that are common for both types of polygon. In our case: width and height. And Rectangle and Triangle would be its derived classes, with specific features that are different from one type of polygon to the other. Classes that are derived from others inherit all the accessible members of the base class. That means that if a base class includes a member A and we derive a class from it with another member called B, the derived class will contain both member A and member B. Inheritance for 2 polygons
  • Slide 17
  • The inheritance relationship of two classes is declared in the derived class. Derived classes definitions use the following syntax: class derived_class_name: public base_class_name{ /*...*/ }; The public access specifier may be replaced by any one of the other access specifiers (protected or private). This access specifier limits the most accessible level for the members inherited from the base class: The members with a more accessible level are inherited with this level instead, while the members with an equal or more restrictive access level keep their restrictive level in the derived class. Inheritance: Public, Protected, Private
  • Slide 18
  • The objects of the classes Rectangle and Triangle each contain members inherited from Polygon. These are: width, height and set_values. The protected access specifier used in class Polygon is similar to private. Its only difference occurs in fact with inheritance: When a class inherits another one, the members of the derived class can access the protected members inherited from the base class, but not its private members. By declaring width and height as protected instead of private, these members are also accessible from the derived classes Rectangle and Triangle, instead of just from members of Polygon. If they were public, they could be access just from anywhere. Inheritance: Public, Protected, Private
  • Slide 19
  • We can summarize the different access types according to which functions can access them in the following way: Where "not members" represents any access from outside the class, such as from main, from another class or from a function. Inheritance: Public, Protected, Private
  • Slide 20
  • In the example above, the members inherited by Rectangle and Triangle have the same access permissions as they had in their base class Polygon: This is because the inheritance relation has been declared using the public keyword on each of the derived classes: class Rectangle : public Polygon { } Inheritance: Public, Protected, Private
  • Slide 21
  • This public keyword after the colon (:) denotes the most accessible level the members inherited from the class that follows it (in this case Polygon) will have from the derived class (in this case Rectangle). Since public is the most accessible level, by specifying this keyword the derived class will inherit all the members with the same levels they had in the base class. Inheritance: Public, Protected, Private
  • Slide 22
  • With protected, all public members of the base class are inherited as protected in the derived class. Conversely, if the most restricting access level is specified (private), all the base class members are inherited as private and thus cannot be accessed from the derived class. Inheritance: Public, Protected, Private
  • Slide 23
  • For example, if daughter were a class derived from mother that we defined as: class Daughter : protected Mother { } This would set protected as the less restrictive access level for the members of Daughter that it inherited from mother. That is, all members that were public in Mother would become protected in Daughter. Of course, this would not restrict Daughter from declaring its own public members. That less restrictive access level is only set for the members inherited from Mother.If no access level is specified for the inheritance, the compiler assumes private for classes declared with keyword class and public for those declared with struct. Inheritance: Public, Protected, Private
  • Slide 24
  • In a nutshell, the next slide shows the summary for each type of inheritance the accessibility of base-class members in a derived class. The first column contains the base-class access specifiers. Inheritance: Public, Protected, Private
  • Slide 25
  • Slide 26
  • In principle, a derived class inherits every member of a base class except: its constructors and its destructor its assignment operator members (operator=) its friends its private members What is inherited from the base class?
  • Slide 27
  • Although the constructors and destructors of the base class are not inherited as constructors and destructors in the derived class, they are still called by the derived class's constructor. Unless otherwise specified, the constructors of derived classes call the default constructors of their base classes (i.e., the constructor taking no arguments), which must exist. Calling a different constructor of a base class is possible, using the same syntax as to initialize member variables in the initialization list: derived_constructor_name (parameters) : base_constructor_name (parameters) {...} What is inherited from the base class?
  • Slide 28
  • Mother, Son and Daughter Classes
  • Slide 29
  • A class may inherit from more than one class by simply specifying more base classes, separated by commas, in the list of a class's base classes (i.e., after the colon). For example, if the program had a specific class to print on screen called Output, and we wanted our classes Rectangle and Triangle to also inherit its members in addition to those of Polygon we could write: class Rectangle: public Polygon, public Output; class Triangle: public Polygon, public Output; Multiple Inheritance
  • Slide 30
  • Slide 31