Разница между public, protected и private наследованием заключается в уровне доступа к переменным и функциям базового класса в производном классе. 12
Public наследование делает общедоступными публичные члены базового класса в производном, а защищённые члены базового класса остаются защищёнными. 2
Protected наследование делает защищёнными публичные и защищённые члены базового класса в производном. 2 Если у производного класса будут свои классы-наследники, то в этих классах-наследниках также можно обращаться к подобным членам базового класса. 1
Private наследование делает приватными публичные и защищённые члены базового класса в производном. 2 Они доступны в любой функции производного класса, но вне производного класса (в том числе у его наследников) они не доступны. 1
При наследовании методы доступа могут изменяться только к более лояльным, то есть в следующей последовательности, но не обратно: private → protected → public. 3