C++ supports OOP, if you define OOP to mean encapsulation, inheritance and polymorphism . However, C++ doesn’t really excel at OOP. One reason is that polymorphism often depends on heap-allocated objects, which, (notwithstanding the use of smart pointers), are more natural to work with in a garbage-collected language.