Inheritance allows classes to reuse and extend existing classes without modifying them, creating a hierarchical relationship. There are several types of inheritance including single, multilevel, multiple, and hybrid. The visibility of members can be private, protected, or public depending on the inheritance relationship. Making a common base class as virtual avoids duplicate members when inherited through multiple paths.