C++ Inheritance and Polymorphism Competency (Intermediate Level)

  • 25m
  • 25 questions
The C++ Inheritance and Polymorphism Competency benchmark will evaluate your ability to understand how to use inheritance for is-a relationships and how to identify uses for private inheritance. You will be assessed on your skills in enumerating the order of constructor/destructor invocation in inheritance hierarchies; recognizing and working with polymorphism, abstract classes, and multiple inheritance; and outlining the use of concepts, including name hiding, static/dynamic dispatch, runtime polymorphism, virtual functions, and covariance. A learner who scores high on this benchmark demonstrates that they have the skills to recognize and implement the key concepts around inheritance and polymorphism.

Topics covered

  • access base class fields from the child class
  • access members of base and derived classes
  • compare constructors in base classes and derived classes
  • contrast is-a relationships and inheritance with has-a relationships and composition
  • create pointers to derived and base class objects
  • demonstrate the covariance edge case in dynamic method dispatch
  • demonstrate the use of runtime polymorphism in different scenarios
  • demonstrate ways of getting around name hiding
  • disable overriding and inheritance using the ‘final’ keyword
  • enable runtime polymorphism by marking destructors as virtual
  • explore the mechanics of runtime polymorphism
  • implement private inheritance
  • outline the concept of abstract classes
  • outline the concepts of multiple inheritance and the diamond hierarchy
  • perform dynamic casts
  • recall how private, public, and protected inheritance works
  • recall that default input arguments should not be specified in virtual functions
  • recall that the signatures of dynamically dispatched methods must be the same
  • recognize errors and issues which can result with dynamic casts
  • use C++-style static casts and contrast them with C-style casts
  • use ‘protected’ as the base class access specifier
  • use the scope resolution operator to invoke specific versions of virtual methods
  • use the ‘using’ keyword and implement virtual methods in multiple inheritance
  • work with copy constructors in inheritance hierarchies
  • work with destructors in inheritance hierarchies