CS 112 - Week 12 Lecture 1 - 2022-11-08 TODAY WE WILL * announcements * start our intro to INHERITANCE * prep for next class * sorry for Homework 9's delay! ...watch for class emails as its parts are available, with an at-least-1st-attempts deadline of 11:59 pm on Friday, November 18 * Reading - * inheritance - Savitch Ch. 15 ===== intro to inheritance! ===== * when you want a SPECIALIZED type of an existing type -- a specialized class of an existing class, in particular -- you can write a special kind of class that INHERITS features from another class; ...this is when there is an IS-A relationship between the existing class and the desired specialized class; like, you have a Car class, and want a specialized RaceCar class -- and in your consideration, you consider that a RaceCar instance IS A kind of Car; ^ that's an IS-A relationship; * you COULD use Car as inspiration and write a completely independent RaceCar class -- BUT you can, in many object-oriented languages including C++, declare RaceCar as a SUBCLASS of Car, inheriting common features from Car (and having to write less code as a result... 8-) ) ...possibility of code reuse, here! and maybe fewer bugs? * of course, CS is not great at standardizing its terms...! might say any of the following: I have a superclass Car, I can use it to help create a subclass RaceCar; (textbook uses base class and derived class) I have a base class Car, I can use it to help create a derived class RaceCar (and sometimes... parent class and child class) I have a parent class Car, I can use it to help create a child class RaceCar ===== syntax for declaring a derived class (subclass, child class) ===== class MyDerivedClass : public MyBaseClass { ... }; * (and #include the header file for MyBaseClass, #include "MyBaseClass.h" ) * JUST from the above, MyDerivedClass has * all the data fields, * MOST of the methods ...of MyBaseClass * and you can add additional methods to MyDerivedClass, and redefine and overload inherited methods from MyBaseClass; * (and you aren't limited to two levels here -- a derived class can itself be the base class for another class! and you can derive MORE than one class from a single class! and then there's also multiple inheritance (having more than one base class...! but that's a topic for another day...!) ===== caveats when declaring a derived class ===== * it DOES inherit data fields -- BUT if those data fields are private (as they should be), the derived class cannot directly access them. (it can use all the lovely public accessors and mutators you carefully wrote for those data fields in your base class!) * MOST methods are inherited -- here are a few exceptions: * constructor: you are expected to provide a constructor for the new derived class; and THIS constructor in the derived class is expected to CALL the constructor for the base class to initialize the inherited data fields (and then the derived class constructor initializes all the data fields new to this derived class) * there is special syntax for a derived class constructor calling a base class constructor: MyDerivedClass::MyDerivedClass(...) : MyBaseClass(....) { //initialize data fields new to this derived class } * we added an overloaded == operator to our Point class; * we started, but did not yet finished, writing a derived class ColorPoint (from derived class Point)