যেহেতু আমরা জানি একটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষার কিছু মৌলিক বৈশিষ্ট্য হলো ইনহেরিটেন্স (Inheritance), এনক্যাপসুলেশন (Encapsulation), পলিমরফিজম (Polymorphism)। যেসব ভাষা এই বৈশিষ্ট্য পুরোপুরি সমর্থন করে সেগুলোকে পুরোপুরি অবজেক্ট-ওরিয়েন্টেড ভাষা বলা হয়। C++-এর মতো কিছু ভাষা এই তিনটি সমর্থন করে কিন্তু পুরোপুরি নয়, তাই সেগুলোকে আংশিকভাবে অবজেক্ট-ওরিয়েন্টেড ভাষা বলা হয়। চলুন দেখি কেন C++-কে পুরোপুরি অবজেক্ট-ওরিয়েন্টেড ভাষা বলা হয় না।
- C++-এ প্রোগ্রাম চালাতে main() ফাংশন দরকার, কিন্তু C++-এ main ফাংশন ক্লাসের ভিতরে থাকে না। তাই C++-এ ক্লাস ব্যবহার না করেও কোড লেখা যায়। অন্যদিকে JAVA-এর মতো কিছু OOP ভাষায় ফাইলের নামের মত একই নামে একটি ক্লাস থাকতে হয় এবং main ফাংশন সেটির ভিতরে থাকে।
- C++-এ গ্লোবাল ভেরিয়েবল ব্যবহার করা যায়। সেটি যেকোনো জায়গা থেকে অ্যাক্সেস করা যায়। এটি ডেটার পূর্ণ গোপনীয়তা দেয় না, কারণ কেউ সেগুলো অ্যাক্সেস এবং মডিফাই করতে বাধা পায় না, তাই এনক্যাপসুলেশন আংশিকভাবে নিশ্চিত হয়। JAVA-এ ক্লাসের ভিতরে ভেরিয়েবল ব্যবহার করা যায় এবং সেটিতে অ্যাক্সেস স্পেসিফায়ারও ব্যবহার করা যায়।
- C++-এ ফ্রেন্ড ফাংশন (friend functions) এর ধারণা আছে। ফ্রেন্ড ফাংশন ব্যবহার করে একটি ক্লাসের প্রাইভেট (private) এবং প্রোটেক্টেড (protected) সদস্যদের অ্যাক্সেস করা যায়। এটি OOP ধারণার লঙ্ঘন করে। Java ফ্রেন্ড ফাংশন সমর্থন করে না।