February ry 7 In Inheritance and polymorphism Jing Jing Jian - - PowerPoint PPT Presentation

february ry 7 in inheritance and polymorphism
SMART_READER_LITE
LIVE PREVIEW

February ry 7 In Inheritance and polymorphism Jing Jing Jian - - PowerPoint PPT Presentation

Data Structures February ry 7 In Inheritance and polymorphism Jing Jing Jian Jiang The Rule of Three If it is necessary to define any one of these three functions in a class, it will be necessary to define all three of these


slide-1
SLIDE 1

Data Structures

February ry 7 – In Inheritance and polymorphism

Jing Jing Jian Jiang

slide-2
SLIDE 2

The “Rule of Three”

If it is necessary to define any one of these three functions in a class, it will be necessary to define all three of these functions: 1. 2. 3.

slide-3
SLIDE 3

Example:

#include "Cube.h" int main() { cs225::Cube c(10); c = c; return 0; } 1 2 3 4 5 6 7

assignmentOpSelf.cpp

slide-4
SLIDE 4

Example:

#include "Cube.h" Cube& Cube::operator=(const Cube &other) { _destroy(); _copy(other); return *this; } 1 … 40 41 42 43 44 45 46

assignmentOpSelf.cpp

slide-5
SLIDE 5

Learning objectives

  • Understand why inheritance is used
  • Compare different ways of using polymorphic functions
  • Distinguish the impact of “virtual” on destructor
slide-6
SLIDE 6

Learning objectives

  • Understand why inheritance is used
  • Compare different ways of using polymorphic functions
  • Distinguish the impact of “virtual” on destructor
slide-7
SLIDE 7

In Inheritance

slide-8
SLIDE 8

#pragma once #include "Shape.h" class Square : public Shape { public: double getArea() const; private: // Nothing! };

Square.h

1 2 3 4 5 6 7 8 9 10 11

Square.cpp

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 … class Shape { public: Shape(); Shape(double length); double getLength() const; private: double length_; }; 4 5 6 7 8 9 10 11 12

Shape.h

slide-9
SLIDE 9

Derived Classes

[Public Members of the Base Class]: [Private Members of the Base Class]:

int main() { Square sq; sq.getLength(); // Returns 1, the length init’d // by Shape’s default ctor ... } 5 6 7 8 … …

main.cpp

slide-10
SLIDE 10

Learning objectives

  • Understand why inheritance is used
  • Compare different ways of using polymorphic functions
  • Distinguish the impact of “virtual” on destructor
slide-11
SLIDE 11

Polymorphism

Object-Orientated Programming (OOP) concept that a single object may take on the type of any of its base types.

slide-12
SLIDE 12

Virtual

slide-13
SLIDE 13

Cube.cpp

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // No print_1() in RubikCube.cpp RubikCube::print_2() { cout << "Rubik" << endl; } // No print_3() in RubikCube.cpp RubikCube::print_4() { cout << "Rubik" << endl; } RubikCube::print_5() { cout << "Rubik" << endl; }

RubikCube.cpp

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Cube::print_1() { cout << "Cube" << endl; } Cube::print_2() { cout << "Cube" << endl; } virtual Cube::print_3() { cout << "Cube" << endl; } virtual Cube::print_4() { cout << "Cube" << endl; } // In .h file: virtual print_5() = 0;

slide-14
SLIDE 14

Runtime of Virtual Functions

virtual-main.cpp Cube c; RubikCube c; RubikCube rc; Cube &c = rc; c.print_1(); c.print_2(); c.print_3(); c.print_4(); c.print_5();

slide-15
SLIDE 15

Why Polymorphism?

slide-16
SLIDE 16

class Animal { public: void speak() { } }; class Dog : public Animal { public: void speak() { } }; class Cat : public Animal { public: void speak() { } };

animalShelter.cpp

1 2 3 4 5 6 7 8 9 10 11 12 13 14

slide-17
SLIDE 17

Abstract Class:

[Requirement]: [Syntax]: [As a result]:

slide-18
SLIDE 18

Learning objectives

  • Understand why inheritance is used
  • Compare different ways of using polymorphic functions
  • Distinguish the impact of “virtual” on destructor
slide-19
SLIDE 19

class Cube { public: ~Cube(); }; class RubikCube : public Cube { public: ~RubikCube(); };

virtual-dtor.cpp

15 16 17 18 19 20 21 22 23

slide-20
SLIDE 20