הורשה
 
נתחיל כעת לדון בנושא הבסיסי האחרון - הורשה (inheritance).
הורשה מספקת כוח רב ל- ++C מכיוון שהיא מאפשרת לקחת מחלקה קיימת וליצור גרסא אחרת בלי לשנות את המחלקה המקורית.
כדי להראות את עקרונות ההורשה, נשתמש בדוגמא של מערכת העוקבת אחר בע"ח במכלאה.
נתבונן במחלקה המגדירה בע"ח. למען הפשטות, נניח שכל בע"ח מיוצג ע"י שם החיה ומספרה במכלאה:

class Animal {
public:
 char name[32];
 int kennel;
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

נניח כעת, שלאחר שהמערכת נבנתה ומתפקדת, אתה נאלץ להרחיב אותה לצורך חישוב חשבונות.
הבעיה היא שהחשבונות יחושבו בצורה אחת עבור חתולים ובצורה אחרת עבור כלבים.
עבור כלבים החשבון יבוסס על מספר הימים במכלאה, משקל הכלב וסוג האוכל אותו הוא אוכל:

int days;

int weight;

enum dogFood {
 dietDogFood,
 regularDogFood,
 puppyFood
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

עבור חתולים החשבון יבוסס על מספר הימים במכלאה וסוג האוכל:

int days;

enum catFood {
 dryCatFood,
 cannedCatFood
};
העבר את העכבר על שורות הקוד בכדי לקבל הסבר מפורט

כעת, דרך אחת, היא להוסיף את המידע החדש הזה כמשתני מחלקה למחלקה Animal. במקרה זה תצטרך גם דגל, אשר יציין עבור כל אובייקט באיזו חיה מדובר.
אבל דרך זו אינה יפה, מכיוון שיהיו משתני מחלקה שאינם שימושיים לכלבים ומשתני מחלקה שאינם שימושיים לחתולים.
דרך יפה יותר תהיה, אם לכל סוג בע"ח יהיה בדיוק את משתני המחלקה הנדרשים לו.
ובכן, נראה איך פועלים לפי הגישה הזו.