Những tính năng cơ bản của ngôn ngữ lập trình hướng đối tượng (OOP) bao gồm: Kế thừa (Inheritance), Đóng gói (Encapsulation), Đa hình (Polymorphism). Ngôn ngữ hỗ trợ đầy đủ ba tính năng này được gọi là ngôn ngữ OOP thuần túy. C++ hỗ trợ ba tính năng này nhưng không hoàn toàn, do đó C++ được coi là ngôn ngữ hướng đối tượng một phần. Dưới đây là lý do:
- Hàm main() không nằm trong class: Trong C++, chương trình bắt đầu từ hàm main() nằm ngoài class. Ta có thể viết code hoàn toàn không dùng class. Ngược lại, Java yêu cầu hàm main phải nằm trong một class.
- Biến toàn cục (global variables): C++ cho phép biến toàn cục truy cập từ bất kỳ đâu, vi phạm tính đóng gói vì không thể hạn chế truy cập/sửa đổi. Java chỉ cho phép biến trong class và dùng access specifier để kiểm soát.
- Hàm bạn (friend functions): C++ có khái niệm friend function cho phép truy cập thành viên private/protected của class khác, vi phạm nguyên tắc OOP. Java không hỗ trợ friend function.