{"id":928,"date":"2024-08-09T20:25:02","date_gmt":"2024-08-09T20:25:02","guid":{"rendered":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/?page_id=928"},"modified":"2025-01-26T18:49:53","modified_gmt":"2025-01-26T18:49:53","slug":"inheritance","status":"publish","type":"page","link":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/topics\/c-details\/inheritance\/","title":{"rendered":"Inheritance"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Inheritance\"><\/span>Inheritance<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Overview\"><\/span>Overview<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>We have a fair amount to cover about Inheritance in C++<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Base and Derived Classes<\/li>\n\n\n\n<li>Access Control and Derivation\n<ul class=\"wp-block-list\">\n<li>Member Access from Derived Classes<\/li>\n\n\n\n<li><strong>protected<\/strong> Class Members<\/li>\n\n\n\n<li>Access Declarations<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Inheritance and Constructors&nbsp;&nbsp;<\/li>\n\n\n\n<li>Inheritance and Destructors<\/li>\n\n\n\n<li>Inherited Member Functions<\/li>\n\n\n\n<li>Non-inherited Member Functions<\/li>\n\n\n\n<li>Upcasting and Downcasting<\/li>\n<\/ul>\n\n\n\n<p>So, let&#8217;s get on to those topics&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Base_and_Derived_Classes\"><\/span>Base and Derived Classes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A class can inherit the features or functionality of another class through <em>class derivation<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The class that inherits is called the <em>derived class<\/em>.&nbsp;<\/li>\n\n\n\n<li>The class that is inherited from is called the <em>base class<\/em>.<\/li>\n<\/ul>\n\n\n\n<p>A class can be derived to :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Restrict<\/em> or <em>reinterpret<\/em> the base class.<\/li>\n\n\n\n<li>Factor out <em>common functionality<\/em> for reuse.<\/li>\n\n\n\n<li><em>Specialize<\/em> or <em>augment<\/em> the base class to add a new layer of functionality<\/li>\n<\/ul>\n\n\n\n<p>The syntax is:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class Base \n{   \n\t\/\/ Base class members \n};\n\nclass Derived : <strong>public Base \/\/ inherits from Base<\/strong>\n{  \n\t\/\/ Derived class members \n};\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Example\"><\/span>Example<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>This declares two classes: Student and GradStudent. GradStudent is a class derived from class Student<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Student.hpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/24\/24.\n\/\/\n\n#ifndef Student_hpp\n#define Student_hpp\n\n#include &lt;string&gt;\n\n\/\/ Student.h\nclass Student\n{\npublic:\n  Student(const int  id,\n          const std::string &amp;name);\n  void Print() const;\n  double GetGPA() const;\n  void SetGPA(double gpa);\n  \/\/ ...\nprivate:\n   int         m_id;  \/\/ Student ID\n   std::string m_name; \/\/ Student name\n   double      m_gpa; \/\/ Grade Point Average\n};\n\nclass GradStudent : public Student\n{\npublic:\n  GradStudent(const int id,\n              const std::string &amp;name,\n              const std::string &amp;dept);\n  void Print() const;\n  const std::string &amp;GetThesisTitle() const;\n  void SetThesisTitle(std::string &amp;thesis_title);\n  \/\/ ...\nprivate:\n   std::string  m_dept;         \/\/ Department\n   std::string  m_thesis_title; \/\/ Thesis title\n};\n\n#endif \/* Student_hpp *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Student.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/24\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Student_hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Student_hpp<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;string&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Student.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Student<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Student<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">id<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">          <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">name<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">GetGPA<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">SetGPA<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">gpa<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">   <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">         m_id;<\/span><span style=\"color: #008000\">  \/\/ Student ID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">   <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::string m_name;<\/span><span style=\"color: #008000\"> \/\/ Student name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">   <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\">      m_gpa;<\/span><span style=\"color: #008000\"> \/\/ Grade Point Average<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">GradStudent<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Student<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">GradStudent<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">id<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">name<\/span><span style=\"color: #000000\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">dept<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #795E26\">GetThesisTitle<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">SetThesisTitle<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #267F99\">string<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">thesis_title<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">   <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::string  m_dept;<\/span><span style=\"color: #008000\">         \/\/ Department<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">   <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::string  m_thesis_title;<\/span><span style=\"color: #008000\"> \/\/ Thesis title<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Student_hpp *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>A class <strong><em>derived from <\/em><\/strong>class <strong>X<\/strong> <em>is a kind of<\/em>&nbsp; (or <em>is a<\/em>) <strong>X<\/strong>.<\/p>\n\n\n\n<p>A class <strong><em>containing<\/em><\/strong> a member of class <strong>Y<\/strong> <em>has a<\/em> <strong>Y<\/strong>.<\/p>\n\n\n\n<p>For example, classes Vehicle, Airplane, and Car. Vehicles have a Color, A Car has an Engine, and four Wheels.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vehicle.hpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/25\/24.\n\/\/\n\n#ifndef Vehicle_h\n#define Vehicle_h\n\nenum class Color{White, Black, Green, Blue};\n\nclass Vehicle\n{\n  \/\/ ...\nprivate:\n  double max_speed;\n  int    max_occupants;\n  Color  color;\n};\n\nclass Airplane : public Vehicle\n{\n  \/\/ An Airplane is a Vehicle\n  \/\/ ...\nprivate:\n  double m_wingspan;\n};\n\nenum class Engine(4Cylindar, 8Cylinder, Rotary)\n\nclass Car : public Vehicle\n{\n  \/\/ A Car is a Vehicle\n  \/\/ ...\n  \/\/ A Car has an Engine, wheels\nprivate:\n  Engine engine;\n  Wheel  wheel[4];\n};\n\n#endif \/* Vehicle_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vehicle.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/25\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Vehicle_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Vehicle_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">enum<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Color<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #0070C1\">White<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0070C1\">Black<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0070C1\">Green<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0070C1\">Blue<\/span><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vehicle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> max_speed;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">    max_occupants;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Color  color;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Airplane<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vehicle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ An Airplane is a Vehicle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> m_wingspan;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">enum<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Engine<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">4Cylindar<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">8Cylinder<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #267F99\">Rotary<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Car<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vehicle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ A Car is a Vehicle<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ A Car has an Engine, wheels<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Engine engine;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Wheel  <\/span><span style=\"color: #001080\">wheel<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Vehicle_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>An instance of a derived class <em>can be used anywhere an instance of its base class can be used<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The derived class is a <em>superset<\/em> of the base class and so contains all the members of the base class.<\/li>\n<\/ul>\n\n\n\n<p><em>The reverse is not true<\/em>;&nbsp; a base class <strong><em>cannot<\/em><\/strong> be used in place of a class derived from it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It does not have all the members of the derived class.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Base_Derived_Class_Conversions\"><\/span>Base &amp; Derived Class Conversions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>For example, conversion can take place in one direction only:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vehicle.cpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/25\/24.\n\/\/\n\n#include &lt;stdio.h&gt;\n\n#include &quot;Vehicle.hpp&quot;\n\nvoid DoConversions()\n{\n  Vehicle base;\n  Car     derived;\n  \n  base = derived;\n  derived = base;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vehicle.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/25\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;stdio.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Vehicle.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">DoConversions<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Vehicle base;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Car     derived;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  base = derived;<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  derived = base;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>This code, given the previous class declarations for Vehicle and Car, produces the following:<\/p>\n\n\n\n<p>base = derived compiles correctly.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note that when a derived class is converted to a base class, <em>the result has lost its derived class members<\/em> &#8212; it has been <em>&#8216;sliced&#8217;<\/em>.<\/p>\n<\/blockquote>\n\n\n\n<p>but:<\/p>\n\n\n\n<p>derived = base produces a compile-time error:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Vehicle.cpp:18:11 No viable overloaded '='\n<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Overriding_Class_Members\"><\/span>Overriding Class Members<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>A derived class can define a member with the same name as a base class&nbsp; member.<\/p>\n\n\n\n<p>This is called <em>overriding<\/em> (or <em>refinement<\/em>).<\/p>\n\n\n\n<p>You can override a data member, or a member function:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Base.hpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/25\/24.\n\/\/\n\n#ifndef Base_h\n#define Base_h\n\nclass Base\n{\npublic:\n  Base(int i = 0) : m_i(i)  {}\n  void Print() const;\nprivate:\n  int m_i;\n};\n\nclass Derived : public Base\n{\npublic:\n  Derived(int x, int i) : Base(x), m_i(i) {}\n  void Print() const;\nprivate:\n  int m_i;\n};\n\n#endif \/* Base_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base.hpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/25\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Base_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Base_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Base<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Base<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">) : <\/span><span style=\"color: #795E26\">m_i<\/span><span style=\"color: #000000\">(i)  {}<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> m_i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Derived<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Base<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Derived<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">x<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">) : <\/span><span style=\"color: #795E26\">Base<\/span><span style=\"color: #000000\">(x), <\/span><span style=\"color: #795E26\">m_i<\/span><span style=\"color: #000000\">(i) {}<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> m_i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Base_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Base.cpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/25\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Base.hpp&quot;\n\nvoid Base::Print() const\n{\n  std::cout &lt;&lt; m_i &lt;&lt; std::endl;  \/\/ Base m_i\n}\n\nvoid Derived::Print() const\n{\n  std::cout &lt;&lt; m_i &lt;&lt; std::endl;  \/\/ Derived m_i\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/25\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Base.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Base<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; m_i &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><span style=\"color: #008000\">  \/\/ Base m_i<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Derived<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">() <\/span><span style=\"color: #0000FF\">const<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; m_i &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><span style=\"color: #008000\">  \/\/ Derived m_i<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Base and Derived Classes\n\/\/\n\/\/  Created by Bryan Higgs on 8\/24\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Base.hpp&quot;\n\nint main(int argc, const char * argv[]) \n{\n  Base b(37);\n  Derived d(52, 101);\n\n  b.Print();\n  d.Print();\n  \n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base and Derived Classes<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/24\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Base.hpp&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Base <\/span><span style=\"color: #795E26\">b<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">37<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Derived <\/span><span style=\"color: #795E26\">d<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">52<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">101<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">b<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">d<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">Print<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>37\n101\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>Can you explain this output?<\/p>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Class_Vector\"><\/span>Class Vector<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Remember our <strong>Vector<\/strong> class?<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vector.h\n\/\/  Base &amp; Derived Classes - Vector\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#ifndef Vector_h\n#define Vector_h\n\nclass Vector \/\/ A vector of ints\n{\npublic:\n  \/\/ Constructors &amp; destructors\n  explicit Vector(const int elements = 10);\n  Vector(const Vector &amp;source);\n  Vector(const int source[],\n         const int elements);\n  ~Vector() { delete [] m_p; }\n\n  int getElementCount() { return m_elems; }\n  \n  \/\/ Subscript operator overload\n  int &amp;operator[](const int i);\n  \nprivate:\n  int *m_p;    \/\/ Ptr to array\n  int  m_elems;  \/\/ Alloc. count\n};\n\n#endif \/* Vector_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vector.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base &amp; Derived Classes - Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Vector_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Vector_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #008000\">\/\/ A vector of ints<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Constructors &amp; destructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">explicit<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">elements<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">10<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">         <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">elements<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~Vector<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">delete<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #AF00DB\">[]<\/span><span style=\"color: #000000\"> m_p; }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_elems; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Subscript operator overload<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator[]<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> *m_p;<\/span><span style=\"color: #008000\">    \/\/ Ptr to array<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">  m_elems;<\/span><span style=\"color: #008000\">  \/\/ Alloc. count<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Vector_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Vector.cpp\n\/\/  Base &amp; Derived Classes - Vector\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Vector.h&quot;\n\nVector::Vector(const int elements)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = elements];\n  \/\/ Set all elements to 0\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = 0;\n}\n\nVector::Vector(const Vector &amp;source)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = source.m_elems];\n  \/\/ Copy values from source elements\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = source.m_p[i];\n}\n\nVector::Vector(const int source[],\n               const int elements)\n{\n  \/\/ Allocate space for elements\n  m_p = new int[m_elems = elements];\n  \/\/ Copy values from source elements\n  \/\/ (assuming that source is properly sized)\n  for (int i = 0; i &lt; m_elems; i++)\n    m_p[i] = source[i];\n}\n\n\/\/ Subscript operator overload\nint &amp;Vector::operator[](const int i)\n{\n  \/\/ Do bounds checking...\n  if ( (i &lt; 0) || (i &gt;= m_elems) )\n  {\n    std::cerr &lt;&lt; &quot;Illegal Vector index: &quot;\n              &lt;&lt; i &lt;&lt; &quot; (max: &quot;\n              &lt;&lt; (m_elems - 1) &lt;&lt; ')'\n              &lt;&lt; std::endl;\n    exit(1);  \/\/ Abrupt exit!\n  }\n  \/\/ We're within bounds\n  return m_p[i];\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Vector.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base &amp; Derived Classes - Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Vector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elements)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = elements];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Set all elements to 0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> Vector &amp;source)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_elems<\/span><span style=\"color: #000000\">];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Copy values from source elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> source[],<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">               <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> elements)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Allocate space for elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  m_p = <\/span><span style=\"color: #AF00DB\">new<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">[m_elems = elements];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Copy values from source elements<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ (assuming that source is properly sized)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; m_elems; i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i] = <\/span><span style=\"color: #001080\">source<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Subscript operator overload<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #AF00DB\">operator[]<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ Do bounds checking...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> ( (i &lt; <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">) || (i &gt;= m_elems) )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Illegal Vector index: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; i &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; (max: &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; (m_elems - <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">) &lt;&lt; <\/span><span style=\"color: #A31515\">&#39;)&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">exit<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">  \/\/ Abrupt exit!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">  \/\/ We&#39;re within bounds<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">m_p<\/span><span style=\"color: #000000\">[i];<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Class_BoundedVector\"><\/span>Class BoundedVector<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Let&#8217;s create a class <code>BoundedVector<\/code> that is, in effect, a more generalized form of the <code>Vector<\/code> class: when an instance is created, the vector bounds are specified. While a Vector instance is created with a specified number of elements, and those elements may be accessed using the subscript operator, with subscripts from 0 to (&lt;number-of-elements&gt; &#8211; 1), a <code>BoundedVector<\/code> is created with a low bound and a high bound, and a size calculated from the low and high bounds.<\/p>\n\n\n\n<p>The <code>BoundedVector<\/code> class is derived from the <code>Vector<\/code> class, and relies on its base class for some of its features.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  BoundedVector.h\n\/\/  Base &amp; Derived Classes - Vector\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#ifndef BoundedVector_h\n#define BoundedVector_h\n\n#include &quot;Vector.h&quot;\n\nclass BoundedVector : public Vector\n{\npublic:\n  BoundedVector(int low, int high);\n  int LowBound() { return m_low; }\n  int HighBound() { return m_high; }\n  int &amp;operator[](int i)\n  { return Vector::operator[](i-m_low); }\nprivate:\n  int    m_low;  \/\/ Low bound\n  int    m_high;   \/\/ High bound\n};\n\n#endif \/* BoundedVector_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  BoundedVector.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base &amp; Derived Classes - Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> BoundedVector_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> BoundedVector_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Vector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">BoundedVector<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">BoundedVector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">low<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">high<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">LowBound<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_low; }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">HighBound<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> m_high; }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #AF00DB\">operator[]<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">i<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Vector<\/span><span style=\"color: #000000\">::operator[](i-m_low); }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">    m_low;<\/span><span style=\"color: #008000\">  \/\/ Low bound<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\">    m_high;<\/span><span style=\"color: #008000\">   \/\/ High bound<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* BoundedVector_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  BoundedVector.cpp\n\/\/  Base &amp; Derived Classes - Vector\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;BoundedVector.h&quot;\n\n\/\/ Constructor\nBoundedVector::BoundedVector(int low, int high)\n  : Vector((high - low) + 1),  \/\/ NOTE!\n    m_low(low), m_high(high)\n{\n  if (low &gt; high)      \/\/ Check the bounds\n  {\n    std::cerr &lt;&lt; &quot;\\nLow bound &quot; &lt;&lt; low\n              &lt;&lt; &quot; greater than high bound&quot;\n              &lt;&lt; high &lt;&lt; std::endl;\n    exit(0);      \/\/ Abrupt exit!\n  }\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  BoundedVector.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base &amp; Derived Classes - Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;BoundedVector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ Constructor<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #267F99\">BoundedVector<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">BoundedVector<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> low, <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> high)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  : <\/span><span style=\"color: #795E26\">Vector<\/span><span style=\"color: #000000\">((high - low) + <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">),<\/span><span style=\"color: #008000\">  \/\/ NOTE!<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">m_low<\/span><span style=\"color: #000000\">(low), <\/span><span style=\"color: #795E26\">m_high<\/span><span style=\"color: #000000\">(high)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">if<\/span><span style=\"color: #000000\"> (low &gt; high)<\/span><span style=\"color: #008000\">      \/\/ Check the bounds<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cerr &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;<\/span><span style=\"color: #EE0000\">\\n<\/span><span style=\"color: #A31515\">Low bound &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; low<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #A31515\">&quot; greater than high bound&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; high &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #795E26\">exit<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">);<\/span><span style=\"color: #008000\">      \/\/ Abrupt exit!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Here&#8217;s a simple test program for these classes:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:60%\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Base &amp; Derived Classes - Vector\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;BoundedVector.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  Vector         values(6);\n  BoundedVector  bvalues(-5, 3);\n\n  for (int i = 0; i &lt; values.getElementCount(); i++)\n  {\n    values[i] = i;\n  }\n  std::cout &lt;&lt; &quot;Vector contents: &quot; &lt;&lt; std::endl;\n  for (int i = 0; i &lt; values.getElementCount(); i++)\n  {\n    std::cout &lt;&lt; &quot;[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot;\n              &lt;&lt; values[i] &lt;&lt; std::endl;\n  }\n\n  for (int i = bvalues.LowBound(); i &lt;= bvalues.HighBound(); i++)\n  {\n    bvalues[i] = i*i;\n  }\n  std::cout &lt;&lt; &quot;BoundedVector contents: &quot; &lt;&lt; std::endl;\n  for (int i = bvalues.LowBound(); i &lt;= bvalues.HighBound(); i++)\n  {\n    std::cout &lt;&lt; &quot;[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot;\n              &lt;&lt; bvalues[i] &lt;&lt; std::endl;\n  }\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Base &amp; Derived Classes - Vector<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;BoundedVector.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Vector         <\/span><span style=\"color: #795E26\">values<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #098658\">6<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  BoundedVector  <\/span><span style=\"color: #795E26\">bvalues<\/span><span style=\"color: #000000\">(-<\/span><span style=\"color: #098658\">5<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">values<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">values<\/span><span style=\"color: #000000\">[i] = i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Vector contents: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">; i &lt; <\/span><span style=\"color: #001080\">values<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">getElementCount<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;[&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; i &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;] = &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #001080\">values<\/span><span style=\"color: #000000\">[i] &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">LowBound<\/span><span style=\"color: #000000\">(); i &lt;= <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">HighBound<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">[i] = i*i;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;BoundedVector contents: &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">for<\/span><span style=\"color: #000000\"> (<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> i = <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">LowBound<\/span><span style=\"color: #000000\">(); i &lt;= <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">HighBound<\/span><span style=\"color: #000000\">(); i++)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">    <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;[&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; i &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;] = &quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">              &lt;&lt; <\/span><span style=\"color: #001080\">bvalues<\/span><span style=\"color: #000000\">[i] &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:40%\">\n<p>Which outputs the following:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Vector contents: \n&#91;0] = 0\n&#91;1] = 1\n&#91;2] = 2\n&#91;3] = 3\n&#91;4] = 4\n&#91;5] = 5\nBoundedVector contents: \n&#91;-5] = 25\n&#91;-4] = 16\n&#91;-3] = 9\n&#91;-2] = 4\n&#91;-1] = 1\n&#91;0] = 0\n&#91;1] = 1\n&#91;2] = 4\n&#91;3] = 9\nProgram ended with exit code: 0<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Member_Access_Control_from_Derived_Classes\"><\/span>Member Access Control from Derived Classes<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Remember that a class can use <em>member access control <\/em>to specify access to members from outside the class:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class Bumble \n{    \n\tint   a;  \/\/ private \npublic:    \n\tfloat b;  \/\/ public \nprivate:    \n\tlong  c;  \/\/ private    \n\t\/\/ ... \n}; <\/code><\/pre>\n\n\n\n<p>An <em>access specifier<\/em> can be applied to a base class reference:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class Mumble : <strong>public<\/strong> Bumble \n{ \nprivate:    \n\tint   x; \npublic:    \n\tfloat y;    \n\tlong  z;    \n\t\/\/ ... \n};<\/code><\/pre>\n\n\n\n<p>which controls <em>what access the derived class will have to the base class members<\/em>.<\/p>\n\n\n\n<p>The default access specifier for a base class is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>private<\/strong> when the derived class is a <strong>class<\/strong>&nbsp;<\/li>\n\n\n\n<li><strong>public<\/strong> when the derived class is a <strong>struct<\/strong><\/li>\n<\/ul>\n\n\n\n<p>If we derive a class using a <strong>public<\/strong> base class (<em>public inheritance<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class Derived : public Base { ... };<\/strong><\/code><\/pre>\n\n\n\n<p>then the public members of the base class become publicly accessible through the derived class.<\/p>\n\n\n\n<p>If we derive a class using a <strong>private<\/strong> base class (<em>private inheritance<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class Derived : private Base { ... };<\/strong><\/code><\/pre>\n\n\n\n<p>then the public members of the base class become privately accessible from within the derived class.<\/p>\n\n\n\n<p>Regardless of the base class access specified, private members of a base class are not accessible from within the derived class or through it (unless access is explicitly granted through friend declarations &#8212; something to use very sparingly).<\/p>\n\n\n\n<p>It&#8217;s analogous to a class being a member of another class:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class B { ... };\nclass C { ... };\nclass A\n{\npublic:\n\tB\tmy_b;\t\/\/ public members of B \n\t\t\t\/\/ accessible through class A\nprivate:\n\tC\tmy_c;\t\/\/ public members of C <strong>not<\/strong> \n\t\t\t\/\/ accessible through class A\n};<\/code><\/pre>\n\n\n\n<p>When you inherit from a base class using <strong>public<\/strong> inheritance, you have an &#8216;is-a&#8217; (or &#8216;is-a-kind-of&#8217;) relationship:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class Car : public Vehicle { ... };<\/strong><\/code><\/pre>\n\n\n\n<p>A <strong>Car<\/strong> &#8216;is-a[-kind-of]&#8217; <strong>Vehicle<\/strong>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-text-align-center has-large-font-size\" style=\"margin-bottom:0px;padding-bottom:5px\"><strong>But beware!<\/strong><\/p>\n\n\n\n<p style=\"margin-top:0px;padding-top:5px\">When you inherit from a base class <em>not using<\/em> <strong>public<\/strong> inheritance, you <strong><em>do not have an &#8216;is-a&#8217; relationship!<\/em><\/strong><\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Unfortunately, the default:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class Car : Vehicle { ... };<\/strong><\/code><\/pre>\n\n\n\n<p>is equivalent to <em>private<\/em> inheritance:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>class Car : private Vehicle { ... };<\/strong><\/code><\/pre>\n\n\n\n<p>which is <strong><em>not<\/em><\/strong> what you normally want!<\/p>\n<\/blockquote>\n\n\n\n<p style=\"font-size:clamp(19.481px, 1.218rem + ((1vw - 3.2px) * 0.9), 31px);\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>private:    \n\tint a; \npublic:    \n\tint b; \t\/\/ Parent1's member functions have \n\t\t\t\/\/ access to:  <strong>a<\/strong>, <strong>b<\/strong> \n};\t\t\t\/\/ Normal code has access, through\n\t\t\t\/\/ class Parent1, to: <strong>b<\/strong>\n\nclass Child1 : <strong>private<\/strong> Parent1 { \nprivate:    \n\tint c; \npublic:    \n\tint d; \t\/\/ Child1's member functions have \n\t\t\t\/\/ access to:  <strong>b<\/strong>, <strong>c<\/strong>, <strong>d<\/strong> \n};\t\t\t\/\/ Normal code has access, through \n\t\t\t\/\/ class Child1, to: <strong>d<\/strong>\n\nclass Child2 : <strong>public<\/strong> Parent1 { \nprivate:    \n\tint e; \npublic:    \n\tint f; \t\/\/ Child2's member functions have \n\t\t\t\/\/ access to:  <strong>b<\/strong>, <strong>e<\/strong>, <strong>f<\/strong> \n};\t\t\t\/\/ Normal code has access, through \n\t\t\t\/\/ class Child2, to:  <strong>b<\/strong>, <strong>f<\/strong>\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"protected_Class_Members\"><\/span>protected Class Members<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>It quickly became apparent that the simple <strong>private<\/strong> vs <strong>public<\/strong> access control was too &#8216;all or nothing&#8217; to handle inheritance appropriately. The relationship between a derived class and its base class(es) is often closer than that of a class with the rest of the world.<\/p>\n\n\n\n<p>To allow access from derived classes to base class members, it often became necessary to make the base class members <strong>public<\/strong>. However, this exposes those members to the rest of the world.&nbsp; Not good!<\/p>\n\n\n\n<p>So, there came into being a third access specifier, <strong>protected<\/strong>, which provides a middle ground between <strong>private<\/strong> and <strong>public<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class Bumble\n{\nprivate:\t\/\/ accessible only within class\n\tint a;\n<strong>protected:<\/strong>\t\/\/ ...<strong>class or derived classes<\/strong>\n\tfloat b;\npublic:\t    \/\/ ...anyone\n\tlong c;\n\t\/\/ ...\n};<\/code><\/pre>\n\n\n\n<p>which can also be applied to a base class (<em>protected inheritance<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>class Mather : <strong>protected<\/strong> Blather { ... };<\/code><\/pre>\n\n\n\n<p><strong>protected<\/strong> only affects access to base class members from derived classes.&nbsp;<\/p>\n\n\n\n<p>Don&#8217;t bother using <strong>protected<\/strong> in a class if the class will never be used as a base class.&nbsp; A class needs to be designed to act as a base class.<\/p>\n\n\n\n<p>Here&#8217;s a summary:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-palette-color-8-background-color has-background\" style=\"border-width:2px\"><thead><tr><th><em>Base Class Member Access Specifier<\/em><\/th><th>public <em>Inheritance<\/em><\/th><th>protected <em>Inheritance<\/em><\/th><th>private <em>Inheritance<\/em><\/th><\/tr><\/thead><tbody><tr><td>public<\/td><td class=\"has-text-align-left\" data-align=\"left\">public<em> in derived class<\/em><\/td><td>protected<em> in derived class<\/em><\/td><td>private <em>in derived class<\/em><\/td><\/tr><tr><td>protected<\/td><td class=\"has-text-align-left\" data-align=\"left\">protected<em> in derived class<\/em><\/td><td>protected <em>in derived class<\/em><\/td><td>private<em> in derived class<\/em><\/td><\/tr><tr><td>private<\/td><td class=\"has-text-align-left\" data-align=\"left\"><em>not accessible in derived class<\/em><\/td><td><em>not accessible in derived class<\/em><\/td><td><em>not accessible in derived class<\/em><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\"><strong>Summary of base class member access from a derived class<\/strong><\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.68), 25px);\">For example:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Hierarchy.h\n\/\/  Protected Class Members\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#ifndef Hierarchy_h\n#define Hierarchy_h\n\nclass A\n{\nprivate:\n  int a;\nprotected:\n  int b;\npublic:\n  int c;\n};\n\nclass B : public A\n{\nprivate:\n  int d;\npublic:\n  void Test();\n};\n\nclass C : private A\n{\nprivate:\n  int e;\npublic:\n  void Test();\n};\n\n#endif \/* Hierarchy_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Hierarchy.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Protected Class Members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Hierarchy_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Hierarchy_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> a;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">protected:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> b;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> c;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">B<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> d;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Test<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">C<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">private<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">Test<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Hierarchy_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(0, 0, 0, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Hierarchy.cpp\n\/\/  Protected Class Members\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &quot;Hierarchy.h&quot;\n\nvoid B::Test()\n{\n  a = 1;  \/\/ ERROR -- no access\n  b = 2;\n  c = 3;\n  d = 4;\n}\n\nvoid C::Test()\n{\n  a = 1;  \/\/ ERROR -- no access\n  b = 2;\n  c = 3;\n  e = 4;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Hierarchy.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Protected Class Members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Hierarchy.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">B<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Test<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  a = <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  b = <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  c = <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  d = <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">C<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">Test<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #000000\">  a = <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  b = <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  c = <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  e = <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Compile-time errors:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Hierarchy.cpp:12:3 'a' is a private member of 'A'\n\nHierarchy.cpp:20:3 'a' is a private member of 'A'\n<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Protected Class Members\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &quot;Hierarchy.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  B  myB;\n  C  myC;\n  myB.a = 1;  \/\/ ERROR -- no access\n  myB.b = 2;  \/\/ ERROR -- no access\n  myB.c = 3;\n  myB.d = 4;  \/\/ ERROR -- no access\n  myC.a = 1;  \/\/ ERROR -- no access\n  myC.b = 2;  \/\/ ERROR -- no access\n  myC.c = 3;  \/\/ ERROR -- no access\n  myC.e = 4;  \/\/ ERROR -- no access\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Protected Class Members<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Hierarchy.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  B  myB;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  C  myC;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myB<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">a<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myB<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">b<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myB<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">c<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myB<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">d<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myC<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">a<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myC<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">b<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">2<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myC<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">c<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">3<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #001080\">myC<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #001080\">e<\/span><span style=\"color: #000000\"> = <\/span><span style=\"color: #098658\">4<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #008000\">  \/\/ ERROR -- no access<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Compile-time errors:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>main.cpp:14:7 'a' is a private member of 'A'\nmain.cpp:15:7 'b' is a protected member of 'A'\nmain.cpp:17:7 'd' is a private member of 'B'\nmain.cpp:18:7 'a' is a private member of 'A'\nmain.cpp:19:7 'b' is a private member of 'A'\nmain.cpp:20:7 'c' is a private member of 'A'\nmain.cpp:21:7 'e' is a private member of 'C'\n<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"public_private_and_protected_Inheritance\"><\/span>public, private, and protected Inheritance<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p><strong>public<\/strong> inheritance is used when the inheritance is part of the interface.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The fact that <strong>X<\/strong> <em>is-a<\/em> <strong>Y<\/strong> is something you are willing to tell your clients about.<\/li>\n<\/ul>\n\n\n\n<p><strong>private<\/strong> inheritance is used when the inheritance is <strong><em>not<\/em><\/strong> part of the interface<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>It is an implementation detail.<\/li>\n\n\n\n<li>The relationship is more like <em>reuses-a.<\/em><\/li>\n\n\n\n<li>Rarely used &#8212; using composition (member class object) usually works as well, and often is simpler.<\/li>\n<\/ul>\n\n\n\n<p><strong>protected<\/strong> inheritance is used when the inheritance <strong><em>is<\/em><\/strong> part of the interface to the derived classes, but is <strong><em>not<\/em><\/strong> part of the interface to the clients.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Even more rarely used &#8212; using composition is usually as good and simpler.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Inheritance_with_Constructors_and_Destructors\"><\/span>Inheritance with Constructors and Destructors<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Constructors\"><\/span>Constructors<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Constructors are not inherited<\/p>\n\n\n\n<p>A derived class constructor can (and by default will) call base class constructors<\/p>\n\n\n\n<p>Constructors cannot be <strong>virtual<\/strong> (see later)<\/p>\n\n\n\n<p>A <strong>public<\/strong> default constructor and a&nbsp; <strong>public<\/strong> copy constructor are generated by the compiler where they are needed.<\/p>\n\n\n\n<p>When an instance of a derived class is created:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If the constructor for the derived class does not explicitly call a base class constructor in its initializer list, then the <em>default base class constructor<\/em> is automatically called.&nbsp;&nbsp;<\/li>\n\n\n\n<li>If there is no default constructor for the base class, then <em>a compile-time error occurs<\/em>.<\/li>\n\n\n\n<li>If a base class constructor is explicitly called in the derived class initializer list, then that is the base class constructor executed; there is no default base class constructor initialization.<\/li>\n<\/ul>\n\n\n\n<p>The order of constructor execution is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Base class constructor(s)<\/em>, in declaration order (independent of initializer list order)<\/li>\n\n\n\n<li><em>Derived class member constructor(s)<\/em>, in declaration order (independent of initializer list order)&nbsp;<\/li>\n\n\n\n<li><em>The body of the derived class constructor<\/em>.<\/li>\n<\/ul>\n\n\n\n<p>Virtual base classes are a special case (see later).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Destructors\"><\/span>Destructors<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>A destructor cannot be inherited.<\/p>\n\n\n\n<p>A derived class destructor can (and by default will) call its base class destructors.<\/p>\n\n\n\n<p>A destructor can be <strong>virtual<\/strong> (see later).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In fact, <em>a base class destructor <\/em><strong><em>should<\/em><\/strong><em> be virtual<\/em>.<\/li>\n<\/ul>\n\n\n\n<p>A <strong>public<\/strong> default destructor is generated&nbsp; by the compiler when no destructor is explicitly declared. It calls the destructors for base classes and members of the derived class.<\/p>\n\n\n\n<p>The order of destructor execution is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>The body of the derived class destructor<\/em>.<\/li>\n\n\n\n<li><em>Derived class member destructor(s)<\/em>, in reverse declaration order<\/li>\n\n\n\n<li><em>Base class destructor(s)<\/em>, in reverse declaration order<\/li>\n<\/ul>\n\n\n\n<p>In other words, <em>the exact opposite of constructor execution order<\/em>.<\/p>\n\n\n\n<p>Virtual base classes are a special case (see later).<\/p>\n\n\n\n<p style=\"font-size:clamp(16.293px, 1.018rem + ((1vw - 3.2px) * 0.68), 25px);\">Example:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Hierarchy.h\n\/\/  Constructors and Destructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#ifndef Hierarchy_h\n#define Hierarchy_h\n\nclass A\n{\npublic:\n  A();\n  ~A();\n};\n\nclass B\n{\npublic:\n  B();\n  ~B();\n};\n\nclass C : public A \/\/ C is derived from A\n{\npublic:\n  C();\n  ~C();\nprivate:\n  B b; \/\/ Member class object\n};\n\nclass D : public C \/\/ D is derived from C\n{\npublic:\n  D();\n  ~D();\nprivate:\n  A a; \/\/ Member class object\n};\n\n#endif \/* Hierarchy_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Hierarchy.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Constructors and Destructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Hierarchy_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Hierarchy_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">A<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~A<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">B<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">B<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~B<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">C<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">A<\/span><span style=\"color: #008000\"> \/\/ C is derived from A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">C<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~C<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  B b;<\/span><span style=\"color: #008000\"> \/\/ Member class object<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">D<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">C<\/span><span style=\"color: #008000\"> \/\/ D is derived from C<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">D<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">~D<\/span><span style=\"color: #000000\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  A a;<\/span><span style=\"color: #008000\"> \/\/ Member class object<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Hierarchy_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Hierarchy.cpp\n\/\/  Constructors and Destructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Hierarchy.h&quot;\n\n\/\/ class A\nA::A()\n{\n  std::cout &lt;&lt; &quot;in A constructor&quot; &lt;&lt; std::endl;\n}\n\nA::~A()\n{\n  std::cout &lt;&lt; &quot;in A destructor&quot; &lt;&lt; std::endl;\n}\n\n\/\/ class B\nB::B()\n{\n  std::cout &lt;&lt; &quot;in B constructor&quot; &lt;&lt; std::endl;\n}\n\nB::~B()\n{\n  std::cout &lt;&lt; &quot;in B destructor&quot; &lt;&lt; std::endl;\n}\n\n\/\/ class C\nC::C()\n{\n  std::cout &lt;&lt; &quot;in C constructor&quot; &lt;&lt; std::endl;\n}\n\nC::~C()\n{\n  std::cout &lt;&lt; &quot;in C destructor&quot; &lt;&lt; std::endl;\n}\n\n\/\/ class D\nD::D()\n{\n  std::cout &lt;&lt; &quot;in D constructor&quot; &lt;&lt; std::endl;\n}\n\nD::~D()\n{\n  std::cout &lt;&lt; &quot;in D destructor&quot; &lt;&lt; std::endl;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Hierarchy.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Constructors and Destructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Hierarchy.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ class A<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">A<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">A<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in A constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">A<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">A<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in A destructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ class B<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">B<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">B<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in B constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">B<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">B<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in B destructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ class C<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">C<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">C<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in C constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">C<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">C<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in C destructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/ class D<\/span><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">D<\/span><span style=\"color: #000000\">::<\/span><span style=\"color: #795E26\">D<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in D constructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #267F99\">D<\/span><span style=\"color: #000000\">::~<\/span><span style=\"color: #795E26\">D<\/span><span style=\"color: #000000\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;in D destructor&quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Constructors and Destructors\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &quot;Hierarchy.h&quot;\n\nint main(int argc, const char * argv[]) \n{\n  D d;\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Constructors and Destructors<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Hierarchy.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  D d;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Produces the following output:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>in A constructor\nin B constructor\nin C constructor\nin A constructor\nin D constructor\nin D destructor\nin A destructor\nin C destructor\nin B destructor\nin A destructor\nProgram ended with exit code: 0<\/code><\/pre>\n\n\n\n<p>Can you explain it?<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Safe_Unsafe_Downcasting\"><\/span>Safe &amp; Unsafe Downcasting<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>You can suppress compiler errors resulting from implicit downcasting, by explicitly downcasting, but it&#8217;s usually not a good idea:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  Header.h\n\/\/  Safe Downcasting\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#ifndef Header_h\n#define Header_h\n\nclass Base\n{\npublic:\n  Base() { a = 10; }\nprivate:\n  int a;\n};\n\nclass Derived : public Base\n{\npublic:\n  Derived() { myValue = 44; }\n  double GetMyValue() { return myValue; }\nprivate:\n  double myValue;\n};\n\n#endif \/* Header_h *\/\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Header.h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Safe Downcasting<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#ifndef<\/span><span style=\"color: #0000FF\"> Header_h<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#define<\/span><span style=\"color: #0000FF\"> Header_h<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Base<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Base<\/span><span style=\"color: #000000\">() { a = <\/span><span style=\"color: #098658\">10<\/span><span style=\"color: #000000\">; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> a;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">class<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Derived<\/span><span style=\"color: #000000\"> : <\/span><span style=\"color: #0000FF\">public<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #267F99\">Base<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">public:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">Derived<\/span><span style=\"color: #000000\">() { myValue = <\/span><span style=\"color: #098658\">44<\/span><span style=\"color: #000000\">; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">GetMyValue<\/span><span style=\"color: #000000\">() { <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> myValue; }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">private:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #0000FF\">double<\/span><span style=\"color: #000000\"> myValue;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">};<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#endif<\/span><span style=\"color: #008000\"> \/* Header_h *\/<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono-NL.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono-NL,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#000000;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/\n\/\/  main.cpp\n\/\/  Safe Downcasting\n\/\/\n\/\/  Created by Bryan Higgs on 8\/26\/24.\n\/\/\n\n#include &lt;iostream&gt;\n#include &quot;Header.h&quot;\n\nvoid process(Base &amp;b)\n{\n  Derived d;\n  d = (Derived &amp;)b;    \/\/ OK, no compile time error\n  std::cout &lt;&lt; &quot;Derived value = &quot; &lt;&lt; d.GetMyValue() &lt;&lt; std::endl;\n}\n\nint main(int argc, const char * argv[]) \n{\n  Base b;\n  Derived d;\n  b = d;        \/\/ OK, but sliced\n  process(d);   \/\/ No problems\n  process(b);   \/\/ Serious problems!  Why?\n\n  return 0;\n}\" style=\"color:#000000;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki light-plus\" style=\"background-color: #FFFFFF\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  main.cpp<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Safe Downcasting<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/  Created by Bryan Higgs on 8\/26\/24.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #008000\">\/\/<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #AF00DB\">#include<\/span><span style=\"color: #0000FF\"> <\/span><span style=\"color: #A31515\">&quot;Header.h&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">void<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">process<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #267F99\">Base<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">&amp;<\/span><span style=\"color: #001080\">b<\/span><span style=\"color: #000000\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Derived d;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  d = (Derived &amp;)b;<\/span><span style=\"color: #008000\">    \/\/ OK, no compile time error<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::cout &lt;&lt; <\/span><span style=\"color: #A31515\">&quot;Derived value = &quot;<\/span><span style=\"color: #000000\"> &lt;&lt; <\/span><span style=\"color: #001080\">d<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #795E26\">GetMyValue<\/span><span style=\"color: #000000\">() &lt;&lt; <\/span><span style=\"color: #267F99\">std<\/span><span style=\"color: #000000\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #795E26\">main<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #0000FF\">int<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argc<\/span><span style=\"color: #000000\">, <\/span><span style=\"color: #0000FF\">const<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">char<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #0000FF\">*<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #001080\">argv<\/span><span style=\"color: #000000\">[]) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Base b;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  Derived d;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  b = d;<\/span><span style=\"color: #008000\">        \/\/ OK, but sliced<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">process<\/span><span style=\"color: #000000\">(d);<\/span><span style=\"color: #008000\">   \/\/ No problems<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #795E26\">process<\/span><span style=\"color: #000000\">(b);<\/span><span style=\"color: #008000\">   \/\/ Serious problems!  Why?<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #000000\">  <\/span><span style=\"color: #AF00DB\">return<\/span><span style=\"color: #000000\"> <\/span><span style=\"color: #098658\">0<\/span><span style=\"color: #000000\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #000000\">}<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Here&#8217;s what the above program produces:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Derived value = 44\nDerived value = 6.95161e-310\nProgram ended with exit code: 0<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>See the problem?<\/p>\n\n\n\n<p>Can you explain it? <\/p>\n\n\n\n<p>What is the problem?<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>Explicit casts from a base class (pointer or reference) are <em>inherently unsafe<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You never know what the actual class instance really is<\/li>\n\n\n\n<li>If it&#8217;s not the type you&#8217;re casting it to, then bad things will happen!<\/li>\n\n\n\n<li><strong><em>If it hurts, stop doing it!<\/em><\/strong><\/li>\n<\/ul>\n\n\n\n<p>But there are situations where you really need to do this. (Although I would think hard about whether you really want to do it!)<\/p>\n\n\n\n<p>How can we do this, and retain safety?<\/p>\n\n\n\n<p>We would like some kind of mechanism where, if the cast isn&#8217;t valid, a run-time error will occur.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"dynamic_cast\"><\/span><strong>dynamic_cast<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>The ISO C++ committee invented the <strong>dynamic_cast<\/strong> for such situations:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code>Shape *s = ...\nRectangle *r = <strong>dynamic_cast&lt;Rectangle *&gt;(s)<\/strong>;\nif (r != 0)\n\t\t\/\/ The object pointed to by s is a\n\t\t\/\/ Rectangle, and r points to it\nelse\n\t\t\/\/ The object pointed to by s is not a\n\t\t\/\/ Rectangle, and r is a null pointer<\/code><\/pre>\n\n\n\n<p>In general, the form of a <strong>dynamic_cast<\/strong> is:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"padding-top:0px;padding-bottom:0px\"><code><strong>dynamic_cast&lt;T&gt;(v)<\/strong><\/code><\/pre>\n\n\n\n<p>where <strong>T<\/strong> is a type (subject to some restrictions), and <strong>v<\/strong> is an expression.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Note that<strong> <\/strong><strong>dynamic_cast<\/strong> is not limited to downcasting.<\/p>\n<\/blockquote>\n\n\n\n<p>The type <strong>T<\/strong> must be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <em>pointer to a complete class type<\/em>, in which case:\n<ul class=\"wp-block-list\">\n<li><strong>v<\/strong> must be an rvalue of a pointer to a complete class type<\/li>\n\n\n\n<li>the result is an rvalue of type <strong>T<\/strong><\/li>\n\n\n\n<li>if the cast fails, the result is a <em>null pointer;<\/em>&nbsp; <em>you have to test for it!<\/em><\/li>\n\n\n\n<li>This case is like a test in your program.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>or a <em>reference to a complete class type<\/em>, in which case:\n<ul class=\"wp-block-list\">\n<li><strong>v<\/strong> must be an lvalue of a complete class type<\/li>\n\n\n\n<li>the result is an lvalue of the type referred to by <strong>T<\/strong><\/li>\n\n\n\n<li>if the cast fails, a <strong>bad_cast<\/strong><strong> <\/strong><em>exception occurs;<\/em>&nbsp; <em>you have to catch it!<\/em><\/li>\n\n\n\n<li>This case is like an assertion;&nbsp; if it fails, then you get an exception. (More about exceptions, later&#8230;)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>or a &#8220;pointer to <strong><em>cv<\/em> void<\/strong>&#8220;. (&#8220;cv&#8221; here is a shorthand for &#8220;possibly cv-qualified&#8221;, which means &#8220;may have a&nbsp;<code>const<\/code>&nbsp;or a&nbsp;<code>volatile<\/code>&nbsp;on it&#8221;) &#8212; <em>Now, we&#8217;re really getting down into the weeds. Let&#8217;s ignore this for now&#8230;<\/em><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-medium-font-size\">Well, we&#8217;ve learned quite a bit about <em>inheritance<\/em>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Base and Derived classes<\/li>\n\n\n\n<li>Access Control and Derivation\n<ul class=\"wp-block-list\">\n<li>Member Access from Derived classes<\/li>\n\n\n\n<li><strong>protected<\/strong> class members<\/li>\n\n\n\n<li>Access declarations<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Inheritance and Constructors<\/li>\n\n\n\n<li>Inheritance and Destructors<\/li>\n\n\n\n<li>Inherited Member Functions<\/li>\n\n\n\n<li>Non-inherited Member Functions<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Upcasting and Downcasting<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size\">All of the above discussion was about <em>single inheritance<\/em>.&nbsp; We&#8217;ll see later the considerable complexities introduced by <em>multiple inheritance<\/em>&#8230;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Onward!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Inheritance Overview We have a fair amount to cover about Inheritance in C++ So, let&#8217;s get on to those topics&#8230; Base and Derived Classes A class can inherit the features or functionality of another class through class derivation. A class can be derived to : The syntax is: Example This declares two classes: Student and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":910,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-928","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/comments?post=928"}],"version-history":[{"count":20,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/928\/revisions"}],"predecessor-version":[{"id":1924,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/928\/revisions\/1924"}],"up":[{"embeddable":true,"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/pages\/910"}],"wp:attachment":[{"href":"https:\/\/bhiggs.x10hosting.com\/PracticalCPlusPlusProgramming\/index.php\/wp-json\/wp\/v2\/media?parent=928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}