توفر لغة السي++ إمكانية البرمجة الكائنية أو الشيئية، والتي تقوم على أساس تصميم نوع بيانات يحمل تحته وظائف ومتغيرات خاصة به لتنفيذ غرض معين. تعتبر لغة السي++ من أوائل اللغات التي قدمت البرمجة الكائنية.Object-oriented programming#History
كما الحال مع بقية لغات البرمجة التي تدعم البرمجة الكائنية (الشيئية)، فإن كائنات سي++ يمكنها أن تورث وتورث (بالإنجليزية: وراثة (حوسبة))، ويمكنها أن تتعدد كائنيًا (بالإنجليزية: Polymorphism)، وأن تُقولب (بالإنجليزية: التحويل في c++) من وإلى أنواع مختلفة من البيانات، وغيرها من الخصائص التي سيتطرق لها لاحقًا.
كتابة كائن بسيط بالسي++
كائن المستطيل
1 #include <iostream> 2 using namespace std; 3 4 class rect { 5 private: 6 int height; 7 int width; 8 public: 9 void set_values(int xHeight, int xWidth); 10 int area(); 11 }; 12 13 void rect::set_values(int xHeight, int xWidth) { 14 height = xHeight; 15 width = xWidth; 16 } 17 18 int rect::area() { 19 return (height * width); 20 } 21 22 int main() { 23 24 rect myRect; 25 myRect.set_values(4,5); 26 cout<<"Area of myRect is: "<<myRect.area()<<".\n"; 27 28 return 0; 29 }
سيطبع هذه البرنامج على الشاشة: Area of myRect is: 20.
خصائص كائن المستطيل
التصريح عن الكائن
إن التصريح عن كائن جديد يتم ببساطة عن طريق كتابة class_Name
متبوعًا باسم الكائن على هذا النسق: ; class_Name ObjectName
. ونحن هنا صرحنا عن الكائن الجديد بـ rect
اختصارًا لـ "rectangle" والتي تعني مستطيل.
صلاحيات و قيود الدخول
عند تصميم كائن في السي++، فإن هنالك ثلاثة قيود: عام public
ومحمي protected
وخاص private
. فأما العام، فيسمح لأي كود خارج الكائن بأن يدخل للعناصر الموجودة فيه، وأما المحمي والخاص فيمنعان أي كود خارج الكائن من الدخول للعناصر الموجودة فيهم، ولا فرق بينهما سوى أن الخاص لا تُورث عناصره.
كما في المثال السابق فإن العناصر تقد بالقيد الذي يعلوها؛ فالمتغيرين width
و height
من نوع عدد صحيح مقيدان بالقيد الخاص private
، وأما الدالتان ()set_values
و ()area
فمقيدتان بالقيد العام public
.
تعريف الدالات الكائنية
من عادات المبرمج أن يفصل بين التصريح عن الدالات، خاصة ما إذا كانت كثيرة، وبين تعريفاتها لكي يكون الكود المصدري أكثر وضوحًا. نفس الحال يطبق هنا؛ فنحن صرحنا عن كلا الدالتين ()set_values
و ()area
داخل الكائن وهذا ولكن فصلنا تعريفاتهما وجعلناها خارج الكائن. عند تعريف دالة كائنية خارج الكائن فإننا نسبقها بـ ::
مسبوقة بالكائن التي تعود له.