Download presentation
Presentation is loading. Please wait.
Published byFernanda Pinckney Modified over 9 years ago
1
Inheritance
2
Many objects have a hierarchical relationship –Examples: zoo, car/vehicle, card game, airline reservation system Inheritance allows software design to take advantage of relationships, supporting reuse Supports the IS-A relationship –what’s the HAS-A relationship?
3
Terminology Base class/Parent class/Superclass –defines generic functionality Derived class/Child class/Subclass –extends or specializes base class –inherits members of parent –may implement new members –may override members of parent
4
Syntax class Student : public Person {…} class Derived : public Base{…} Derived class may override or reimplement a function implemented by base class Public inheritance - public members remain public class Person {class Student:public Person{ … void print(); }
5
Function Invocation Person – print, getName Student – print, changeMajor Person p(…); Student s(…); s.getName(); p.print(); s.print(); p.changeMajor(); s.changeMajor();
6
Function Invocation Person – print, getName Student – print, changeMajor Person p(…); Student s(…); s.getName(); //Person::getName p.print(); //Person::print s.print(); //Student::print p.changeMajor(); //ERROR!!!!!!!! s.changeMajor(); //Student::changeMajor
7
More Syntax - Partial Overriding void Person::print() {…} void Student::print() { Person::print(); //Superclass::function(); … }
8
Protected private members of parent not accessible to child class protected members accessible only to derived classes examples class classname { private: protected: public: }
9
Child Class Constructors Subclass must create superclass –invoke superclass constructor from subclass constructor –use initializer list Student::Student(string newname, string newmajor) :Person(newname), major(newmajor) {…} Student::Student(string newname, string newmajor) :Person(newname) {major = newmajor;}
10
Static Binding Person* p = new Person(…); Student* s = new Student(…); p->print(); //calls Person::print() p = s; //OKAY p->print(); //calls Person::print() p->changeMajor(); //ERROR Function called depends on declared type
11
Example library Magazine LibraryItem *library[10]; library[0] = new Magazine; library[1] = new Book; … library[9] = new Book; Book …
12
Dynamic Binding May want to determine which function to call based on object contents Use virtual functions class Person { virtual void print(); } class Student : public Person { virtual void print(); }
13
Dyanmic Binding Person* p = new Person(…); Student* s = new Student(…); p->print(); //calls Person::print() p = s; //OKAY p->print(); //calls Student::print() p->changeMajor(); //ERROR
14
Polymorphism Many forms A variable is polymorphic if it points to an object with 1 or more virtual functions
15
Casting Person* p; p = new Student(…); Student* s = dynamic_cast (p); Create new pointer of subclass type to point to object Pointer (s in this case) will be NULL if cast was NOT successful Can also use C-style cast
16
Abstract Classes May want to defined base class which cannot be instantiated –Examples – bank account, car Declare one or more functions as pure virtual virtual void print() = 0; virtual void func_name(…) = 0;
17
Summary Statically declared variables –Static binding always applies (virtual functions don’t matter) –Superclass variable can hold object of subclass type –Cannot call derived class functions if reference to object is of base class Dynamically declared variables –Dynamic binding applies virtual functions called will depend on object type –Superclass variable can hold object of subclass type –Cannot call non-virtual derived class functions on variable of type base class –After dynamic cast, can call subclass functions
18
Example Class1Class2:public Class1 1. f13. virtual f2 2. virtual f24. f3 Class1 c1;c2.f1(); Class2 c2;c1.f3(); c1.f1();c1 = c2; c1.f2();c1.f3(); c2.f2(); c2.f3();
19
Example Class1Class2:public Class1 1. f13. virtual f2 2. virtual f24. f3 Class1 c1;c2.f1(); //1 Class2 c2;c1.f3(); //error c1.f1(); //1c1 = c2; c1.f2(); //2c1.f3(); //error c2.f2(); //3 c2.f3(); //4
20
Example Class1Class2:public Class1 1. f13. virtual f2 2. virtual f24. f3 Class1 *c1_ptr = new Class2(); Class2 *c2_ptr = new Class2(); c1_ptr->f3(); c1_ptr->f2(); c2_ptr = dynamic_cast c1_ptr; c2_ptr->f3();
21
Example Class1Class2:public Class1 1. f13. virtual f2 2. virtual f24. f3 Class1 *c1_ptr = new Class2(); Class2 *c2_ptr = new Class2(); c1_ptr->f3(); //error c1_ptr->f2(); //3 c2_ptr = dynamic_cast c1_ptr; c2_ptr->f3(); //4
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.