chapter ten: inheritance, part inkirov/2012/netb151/slides/cfe2_ch10_1.pdf · c++ for everyone by...
TRANSCRIPT
![Page 1: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/1.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Chapter Ten: Inheritance, Part I
Slides by Evan Gallagher & Nikolay Kirov
![Page 2: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/2.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
• To understand the concepts of inheritance and
polymorphism
• To learn how to inherit and override member functions
Chapter Goals
![Page 3: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/3.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
I did some research
Inheritance Hierarchies
Maybe this will convince you...
(I told you I have an onboard computer.)
, yes, on the web
![Page 4: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/4.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
– I am part of a grand Hierarchy!
Inheritance Hierarchies
Not only am I beautiful, shiny and new …
![Page 5: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/5.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Inheritance Hierarchies
![Page 6: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/6.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Inheritance Hierarchies
I AM
ROYALTY.
I have an ancestry!
![Page 7: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/7.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Shovels, rakes, and clippers all perform gardening tasks.
They can be considered as specialized versions
of the general ‘gardening tool’ type.
Inheritance Hierarchies
![Page 8: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/8.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
In object-oriented design,
inheritance is a relationship between
a more general class (called the base class)
and a more specialized class (called the derived class).
The derived class inherits data and
behavior from the base class.
Inheritance Hierarchies
![Page 9: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/9.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Just as I inherited my ROYALNESS.
Inheritance Hierarchies
![Page 10: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/10.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
IS-A
Inheritance
![Page 11: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/11.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
All cars are vehicles.
(This is correct and good English.)
Inheritance: The IS-A Relationship
![Page 12: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/12.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
All cars IS-A vehicles.
(Correct and … um … English?)
Inheritance: The IS-A Relationship
![Page 13: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/13.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
You may recall the UML notation HAS-A for containment.
IS-A
denotes inheritance.
Inheritance: The IS-A Relationship
![Page 14: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/14.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
All cars IS-A vehicles.
(Correct…
…when speaking object ively)
Inheritance: The IS-A Relationship
![Page 15: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/15.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
All Cars are Vehicles.
All Motorcycles are Vehicles.
All Sedans are Vehicles.
Inheritance: The IS-A Relationship
![Page 16: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/16.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Vehicles is the base class.
Car is a derived class.
Truck derives from Vehicle.
Inheritance: The IS-A Relationship
![Page 17: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/17.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
SUV derives from Car,
which derives from Vehicle.
Inheritance: The IS-A Relationship
![Page 18: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/18.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Truck IS-A Vehicle.
SUV IS-A Car.
Inheritance: The IS-A Relationship
![Page 19: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/19.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Everything about being
a Vehicle is inherited by
Cars and Trucks and
SUVs.
Inheritance: The IS-A Relationship
![Page 20: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/20.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Those things specific
to Cars are only
inherited by Sedans
and SUVs.
Inheritance: The IS-A Relationship
![Page 21: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/21.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
I inherited my ROYALNESS from my
parents who inherited it from their parents.
Inheritance Hierarchies
![Page 22: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/22.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
I’m a special version of my base class.
Inheritance Hierarchies
I’m very special.
![Page 23: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/23.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Suppose we have an algorithm that manipulates a Vehicle object.
Since a car IS-A vehicle, we can supply a Car object to such an algorithm,
and it will work correctly.
The Substitution Principle
![Page 24: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/24.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
The substitution principle states
that you can always use a derived-class object
when a base-class object is expected.
![Page 25: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/25.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
If it was good enough for Mama,
The Substitution Principle
it’s good enough for me.
![Page 26: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/26.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
Did you know you have already
been working with class hierarchies?
(No! Really?)
![Page 27: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/27.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
Remember your friends cin and cout?
(Yes.)
Their types are in an inheritance chain.
(Chains? Like prisoners?)
![Page 28: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/28.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
No, silly.
That’s just another phrase for inheritance hierarchy.
![Page 29: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/29.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
Look:
void process_input(istream& in);
You can call this function with an ifstream object or with an istream object.
Why?
![Page 30: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/30.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Substitution Principle
Because istream is more general than ifstream.
void process_input(istream& in);
This works by inheritance:
![Page 31: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/31.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The C++ Stream Hierarchy
istream is the base class of ifstream.
ifstream inherits from istream.
![Page 32: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/32.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Quiz Time
OK.
QUIZ TIME!
![Page 33: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/33.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Quiz Time
OK.
QUIZ TIME!
Everyone likes taking quizzes.
So let’s take one.
(Oh no!)
![Page 34: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/34.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Quiz Time
You don’t like taking quizzes?
(Not really …)
OK
Let’s create a Quiz Question hierarchy.
(Whew!)
![Page 35: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/35.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Design Phase of Question Program
We will try to make this as general as we can because
often quizzes consist of different kinds of questions:
(We like multiple guess questions.)
• Fill-in-the-blank
• Choice (single or multiple)
• Numeric (we’ll allow approximate answers to be OK)
• Free response
![Page 36: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/36.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Design Phase of Question Program
Here is the UML diagram that resulted from our analysis:
![Page 37: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/37.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question
At the root of this hierarchy is the Question type.
![Page 38: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/38.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question
We want a object of Question type to work like this:
First, the programmer sets the question text
and the correct answer in the Question object.
![Page 39: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/39.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question
Then, when it’s time to run the testing program
with a user taking the test, the programmer asks the Question to display the text of the question:
Who was the inventor of C++?
The Question object
displays this
![Page 40: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/40.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Who was the inventor of C++?
Your answer: Bjarne Stroustrup
true
The Base Class: Question
That programmer then gets the use’s response
and passes it to the Question object for evaluation:
The Question object
displays this
![Page 41: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/41.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question – Member Variables
To work as shown, a Question object would contain:
• The question’s text
– string text;
• The correct answer
– string answer;
![Page 42: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/42.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question – Constructor
– string text;
– string answer;
What initial values should these have?
What could possibly be a reasonable initial value?
And – we’ll write mutators to allow setting them later.
So a default Question constructor that does nothing is fine.
The string class constructor gives us empty strings.
![Page 43: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/43.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question – Accessors
A Question object should be able to:
• Display its text
– void display() const;
• Check whether a given response is a correct answer
– bool check_answer(string response) const;
![Page 44: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/44.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question – Mutators
And have these mutators:
• Set the question’s text
– void set_text(string question_text);
• Set the correct answer
– void set_answer(string correct_response);
![Page 45: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/45.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
The Base Class: Question –
class Question
{
public:
Question();
void set_text(string question_text);
void set_answer(string correct_response);
bool check_answer(string response) const;
void display() const;
private:
string text;
string answer;
};
![Page 46: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/46.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Question Class Test Program
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
class Question
{
public:
/**
Constructs a question with empty text and answer.
*/
Question();
Here’s a complete program
to test our Question class.
ch10/quiz1/test.cpp
![Page 47: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/47.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Question Class Test Program
/**
@param question_text the text of this question
*/
void set_text(string question_text);
/**
@param correct_response the answer to this question
*/
void set_answer(string correct_response);
/**
@param response the response to check
@return true if the response was correct,false
otherwise
*/
bool check_answer(string response) const;
ch10/quiz1/test.cpp
![Page 48: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/48.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Question Class Test Program
/**
Displays this question.
*/
void display() const;
private:
string text;
string answer;
};
Question::Question()
{
}
void Question::set_text(string question_text)
{
text = question_text;
}
ch10/quiz1/test.cpp
![Page 49: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/49.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Question Class Test Program
void Question::set_answer(string correct_response)
{
answer = correct_response;
}
bool Question::check_answer(string response) const
{
return response == answer;
}
void Question::display() const
{
cout << text << endl;
}
ch10/quiz1/test.cpp
![Page 50: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/50.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Question Class Test Program
int main()
{
string response;
// Show Boolean values as true, false
cout << boolalpha;
Question q1;
q1.set_text("Who was the inventor of C++?");
q1.set_answer("Bjarne Stroustrup");
q1.display();
cout << "Your answer: ";
getline(cin, response);
cout << q1.check_answer(response) << endl;
return 0;
}
ch10/quiz1/test.cpp
![Page 51: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/51.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
boolalpha
Did you notice this in the code?
// Show Boolean values as true, false
cout << boolalpha;
The boolalpha manipulator causes Boolean values
to be displayed as the output strings:
"true" for true
and "false" for false
– otherwise, numbers would be displayed.
![Page 52: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/52.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
Now for those different kinds of questions.
All of the different kinds IS-A Question
so we code by starting with the base class (Question)
and then we write code for what makes them special versions of more general Question type.
![Page 53: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/53.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
I know about being special.
Implementing Derived Classes
![Page 54: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/54.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
Through inheritance, each of these types will have the data members and member functions set up in class Question.
– plus “specialness-es”
(We don’t rewrite the member functions)
(code reuse in action – all right!)
![Page 55: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/55.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
That’s me!
Implementing Derived Classes
![Page 56: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/56.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
We will start with the “choice question” kind of question:
class ChoiceQuestion : public Question
{
public:
// New and changed member
// functions will go here
private:
// Additional data members
// will go here
};
![Page 57: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/57.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
The : symbol denotes inheritance.
class ChoiceQuestion : public Question
{
public:
// New and changed member
// functions will go here
private:
// Additional data members
// will go here
};
I’m a
derived
class
I’m his parent:
the base class
![Page 58: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/58.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
The keyword public makes sure this is an IS-A relationship.
class ChoiceQuestion : public Question
{
public:
// New and changed member
// functions will go here
private:
// Additional data members
// will go here
};
ChoiceQuestion IS-A Question
![Page 59: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/59.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
We are telling the compiler to start with the Question class and add these things to it.
class ChoiceQuestion : public Question
{
public:
// New and changed member
// functions will go here
private:
// Additional data members
// will go here
};
![Page 60: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/60.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Analysis of the Problem
So what are these new things?
How does a ChoiceQuestion differ from its base class?
It’s use in the interaction with a user will be different:
![Page 61: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/61.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Analysis of the Problem
After a programmer has set the question
text and the several multiple choice answers the ChoiceQuestion object is asked to display:
The Question object
displays all this
In which country was the inventor of C++ born?
1: Australia
2: Denmark
3: Korea
4: United States
![Page 62: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/62.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Analysis of the Problem
The programmer then gets the user’s input,
and sends it to the ChoiceQuestion
object to see if it is correct.
In which country was the inventor of C++ born?
1: Australia
2: Denmark
3: Korea
4: United States
Your answer: 2
true
The Question object
displays this
![Page 63: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/63.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
The code will have to make ChoiceQuestion
be a specialized form of a Question object.
![Page 64: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/64.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes
ChoiceQuestion must have:
• Storage for the various choices for the answer
– Question has the text and correct answer, not these
• A member function for adding another choice
• A display function
– The designer of the Question class could not have
known how to display this sort of multiple choice
question. It only has the question itself, not the choices.
– In the ChoiceQuestion class you will have to rewrite
the display function display.
• This is called overriding a member function.
![Page 65: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/65.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
After specifying the class you are inheriting from,
you only write the differences:
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
![Page 66: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/66.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
Where is the set_text member function?
Where is the string text; data member?
Right there
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
![Page 67: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/67.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
class Question
{
public:
Question();
void set_text(string question_text);
void set_answer(string correct_response);
bool check_answer(string response) const;
void display() const;
private:
string text;
string answer;
};
Derived Classes
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
ChoiceQuestion is one type,
made of two subtypes.
![Page 68: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/68.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
class Question
{
public:
Question();
void set_text(string question_text);
void set_answer(string correct_response);
bool check_answer(string response) const;
void display() const;
private:
string text;
string answer;
};
Derived Classes
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
It is based on the Question
type so it has those parts.
members from class
Question
![Page 69: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/69.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
class Question
{
public:
Question();
void set_text(string question_text);
void set_answer(string correct_response);
bool check_answer(string response) const;
void display() const;
private:
string text;
string answer;
};
Derived Classes
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
And, added to those parts
from the Question type,
it has its own specializations
(its specialness-es).
specializations
![Page 70: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/70.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
class Question
{
public:
Question();
void set_text(string question_text);
void set_answer(string correct_response);
bool check_answer(string response) const;
void display() const;
private:
string text;
string answer;
};
Derived Classes
v
class ChoiceQuestion : public Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
to make one type:
ChoiceQuestion
![Page 71: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/71.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Derived Classes – Syntax
![Page 72: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/72.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
The derived class inherits all data members
and all functions that it does not override.
![Page 73: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/73.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
But…
private means private.
![Page 74: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/74.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
Consider:
Choice_question choice_question;
choice_question.set_answer("2");
(OK, a public method in a derived part.)
![Page 75: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/75.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
How about:
Choice_question choice_question;
choice_question.answer = "2";
(Well, it did inherit that data member …)
![Page 76: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/76.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
No, private means private!
Choice_question choice_question;
choice_question.answer = "2";
// will not compile - private
(OK – private means private even if inherited.)
![Page 77: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/77.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
This means that when you are writing the ChoiceQuestion
member functions, you cannot directly access any private data members in Question.
(Oh, dear. What to do?)
![Page 78: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/78.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
A good design would be
for this function to take a choice
and somehow an indication that this
choice is the correct answer.
(bool! bool! bool!)
![Page 79: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/79.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
void ChoiceQuestion::add_choice(string choice, bool correct)
{
choices.push_back(choice);
if (correct)
{
// Convert choices.size() to string
ostringstream stream;
stream << choices.size();
string num_str = stream.str();
// Set num_str as the answer
...
}
}
Implementing Derived Classes – Coding
Very good:
...but
![Page 80: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/80.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
Oh dear
answer is private!
void ChoiceQuestion::add_choice(string choice, bool correct)
{
choices.push_back(choice);
if (correct)
{
// Convert choices.size() to string
ostringstream stream;
stream << choices.size();
string num_str = stream.str();
// Set num_str as the answer
...
}
}
![Page 81: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/81.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Implementing Derived Classes – Coding
Happily, the designer of Question provided accessors!
void ChoiceQuestion::add_choice(string choice, bool correct)
{
choices.push_back(choice);
if (correct)
{
// Convert choices.size() to string
ostringstream stream;
stream << choices.size();
string num_str = stream.str();
// Set num_str as the answer
set_answer(num_str); }
} implicit parameter.set_answer(num_str);
![Page 82: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/82.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
class ChoiceQuestion : Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
Common Error
Here is the class definition for ChoiceQuestion again.
It’s wrong
Can you find it?
– we made a small mistake.
![Page 83: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/83.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Private Inheritance
Aha!
class ChoiceQuestion : Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
![Page 84: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/84.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Private Inheritance
If you do not specify public inheritance,
you get private inheritance and everything is a mess.
class ChoiceQuestion : private Question
{
public:
ChoiceQuestion();
void add_choice(string choice, bool correct);
void display() const;
private:
vector<string> choices;
};
![Page 85: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/85.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Private Inheritance
If you do not specify public inheritance,
you get private inheritance and everything is a mess.
(Be careful, son!)
![Page 86: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/86.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
You know all about private access:
A derived class has no access to
the private data members of the base class.
Common Error: Replicating Base Class Members
![Page 87: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/87.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
ChoiceQuestion::ChoiceQuestion(string quest_txt)
{
text = quest_txt;
}
But when some programmers encounter a compiler error,
They just start hacking.
Common Error: Replicating Base Class Members
they (not you, of course) don’t stop and THINK.
COMPILER ERROR: accessing private data member text
![Page 88: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/88.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Replicating Base Class Members
And an “easy” fix seems to be to add the
data member that the compiler is complaining about.
ChoiceQuestion::ChoiceQuestion(string quest_txt)
{
text = quest_txt;
}
COMPILER ERROR: accessing private data member text
![Page 89: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/89.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Replicating Base Class Members
And an “easy” fix seems to be to add the
data member that the compiler is complaining about.
class ChoiceQuestion : public Question
{
...
private:
vector<string> choices;
string text;
}
![Page 90: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/90.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Replicating Base Class Members
Oh dear!
TWO test data members!
![Page 91: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/91.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
Common Error: Replicating Base Class Members
One set by the constructor
and the other displayed!
Oh dear! Oh Dear! OH DEAR!!!
![Page 92: Chapter Ten: Inheritance, Part Inkirov/2012/NETB151/slides/CFE2_ch10_1.pdf · C++ for Everyone by Cay Horstmann ... In object-oriented design, inheritance is a relationship between](https://reader036.vdocuments.net/reader036/viewer/2022071217/60492b0980a05e326255e1af/html5/thumbnails/92.jpg)
C++ for Everyone by Cay Horstmann
Copyright © 2012 by John Wiley & Sons. All rights reserved
End Chapter Ten: Inheritance, Part I
Slides by Evan Gallagher & Nikolay Kirov