Difference between revisions of "Intermediate C++ Game Programming Tutorial 18"
From Chilipedia
(→Video Timestamp Index) |
(→Video Timestamp Index) |
||
Line 23: | Line 23: | ||
* Applying the <code>override</code> keyword to increase code safety [https://youtu.be/4Vvc1YurUYA?t=5m17s 5:17] | * Applying the <code>override</code> keyword to increase code safety [https://youtu.be/4Vvc1YurUYA?t=5m17s 5:17] | ||
** Tells the compiler that you are intending to override something virtual in a base class | ** Tells the compiler that you are intending to override something virtual in a base class | ||
− | ** Make the base class member function <code>=0;</code> to ensure the function is overridden in all sub-classes | + | ** Make the base class member function <code>=0;</code> to ensure the function is overridden in all sub-classes [https://youtu.be/4Vvc1YurUYA?t=7m08s 7:08] |
[https://youtu.be/cdOB_gKnJOM Tutorial 18.2] | [https://youtu.be/cdOB_gKnJOM Tutorial 18.2] |
Revision as of 03:58, 12 October 2019
Another two-parter here, and we got the real stuff now. Virtual functions allow you to unlock the true potential of inheritance in C++. You need to know this shit.
Contents
Topics Covered
Part 1
- How to create a virtual function
- Using the override keyword
- Creating a pure virtual function
- Using a container of pointers to manage a heterogeneous collection of objects
- virtual destructors
Part 2
- Using inheritance and composition together
- Basic idea of a polymorphic state machine and its application to entity behavior
Video Timestamp Index
- Create a free function that calls
SpecialMove()
on the instances of derived classes of MemeFighter 0:23- This requires the member function
SpecialMove()
to be added to the base class... - ... and the signatures of these member functions in the derived classes to match up
- This requires the member function
- Using
virtual
on the member function in the base class 3:17- This enables the overridden functions in the child classes to be called
- When you refer to a derived class object using a pointer or a reference to the base class, you can call a virtual function for that object and execute the derived class's version of the function
- Applying the
override
keyword to increase code safety 5:17- Tells the compiler that you are intending to override something virtual in a base class
- Make the base class member function
=0;
to ensure the function is overridden in all sub-classes 7:08
- WORK-IN-PROGRESS
Source Code
Errata
- Forgot the virtual destructor for
class Weapon
! (this one hurts) - In the children, the function signatures should be:
int CalculateDamage( const Attributes& attr,Dice& d ) const override
- Though not technically an error, it might have been a better decision to make
Weapon::GetName()
andWeapon::GetRank()
(pure) virtual functions (this would reduce the amount of per-instance data to just the vtable ptr)