C++ الفئة والكائن مع المثال
ما هي الدرجة؟
A C++ يجمع الفصل البيانات وطرق معالجة البيانات في ملف واحد. تحدد الفصول أيضًا أشكال الكائنات. تُعرف البيانات والأساليب الموجودة في الفصل باسم أعضاء الفصل. الفئة هي نوع بيانات محدد من قبل المستخدم. للوصول إلى أعضاء الفصل، نستخدم مثيلًا للفئة. يمكنك رؤية الفصل كمخطط لكائن ما.
يمكن أن تكون الفئة نموذجًا أوليًا لمنزل. فهي توضح موقع وأحجام الأبواب والنوافذ والأرضيات وما إلى ذلك. ومن خلال هذه الأوصاف، يمكننا إنشاء منزل. ويصبح المنزل هو الكائن. ومن الممكن إنشاء العديد من المنازل من النموذج الأولي. كما أنه من الممكن إنشاء العديد من الكائنات من فئة.
في الشكل أعلاه، لدينا نموذج أولي لمنزل واحد. من هذا النموذج الأولي، قمنا بإنشاء منزلين بميزات مختلفة.
إعلان الطبقة
في C+، يتم تعريف الفصل باستخدام الكلمة الأساسية class. يجب أن يتبع ذلك اسم الفئة. يتم بعد ذلك إضافة نص الفصل بين الأقواس المتعرجة { }.
بناء الجملة
class class-name
{
// data
// functions
};
- اسم الفصل هو الاسم الذي سيتم تعيينه للفئة.
- البيانات هي بيانات الفئة، والتي يتم تعريفها عادةً كمتغيرات.
- الوظائف هي وظائف الطبقة.
الكلمات الرئيسية الخاصة والعامة
لا بد أنك صادفت هاتين الكلمتين الرئيسيتين. هم معدلات الوصول.
- خاصة:
عندما يتم استخدام الكلمة الأساسية الخاصة لتحديد وظيفة أو فئة، فإنها تصبح خاصة. لا يمكن الوصول إلى هذه إلا من داخل الفصل.
- عامة:
من ناحية أخرى، الكلمة الأساسية العامة تجعل البيانات/الوظائف عامة. ويمكن الوصول إليها من خارج الفصل.
تعريف الكائن
يتم إنشاء الكائنات من الطبقات. يتم الإعلان عن كائنات الفئة بطريقة مشابهة للإعلان عن المتغيرات. يجب أن يبدأ اسم الفئة، متبوعًا باسم الكائن. كائن من نوع الفئة.
بناء الجملة
class-name object-name;
- اسم الفئة هو اسم الفئة التي سيتم إنشاء الكائن منها.
- اسم الكائن هو الاسم الذي سيتم تعيينه للكائن الجديد.
تُعرف عملية إنشاء كائن من فئة باسم إنشاء مثيل.
الوصول إلى أعضاء البيانات
للوصول إلى الأعضاء العامة لفئة ما، نستخدم عامل النقطة (.)dot. هذه هي الأعضاء التي تم تمييزها بعلامة تعديل الوصول العام.
مثال 1
#include <iostream>
using namespace std;
class Phone {
public:
double cost;
int slots;
};
int main() {
Phone Y6;
Phone Y7;
Y6.cost = 100.0;
Y6.slots = 2;
Y7.cost = 200.0;
Y7.slots = 2;
cout << "Cost of Huawei Y6 : " << Y6.cost << endl;
cout << "Cost of Huawei Y7 : " << Y7.cost << endl;
cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl;
cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl;
return 0;
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream في الكود الخاص بنا من أجل استخدام وظائفه.
- تضمين مساحة الاسم std في الكود الخاص بنا لاستخدام فئاتها دون الاتصال بها.
- قم بتعريف فئة تسمى الهاتف.
- استخدام مُعدِّل الوصول العام لتحديد المتغيرات التي نحن على وشك إنشائها على أنها متاحة للعامة.
- إعلان التكلفة المتغيرة لنوع البيانات المزدوج.
- قم بتعريف متغير عدد صحيح يسمى فتحات.
- نهاية الجسم الصفي.
- استدعاء الوظيفة الرئيسية (). يجب إضافة منطق البرنامج داخل جسمه.
- قم بإنشاء كائن باسم Y6 من النوع Phone. وهذا ما يسمى إنشاء مثيل.
- قم بإنشاء كائن باسم Y7 من النوع Phone. وهذا ما يسمى إنشاء مثيل.
- قم بالوصول إلى تكلفة المتغير/العضو لفئة Phone باستخدام الكائن Y6. تم ضبط القيمة على 100.0. تم الآن ضبط تكلفة Y6 على 100.0.
- قم بالوصول إلى فتحات المتغير/العضو لفئة Phone باستخدام الكائن Y6. تم تعيين القيمة على 2. تم الآن ضبط فتحات Y6 على 2.
- قم بالوصول إلى تكلفة المتغير/العضو لفئة Phone باستخدام الكائن Y7. تم ضبط القيمة على 200.0. تم الآن ضبط تكلفة Y7 على 200.0.
- قم بالوصول إلى فتحات المتغير/العضو لفئة Phone باستخدام الكائن Y7. تم تعيين القيمة على 2. تم الآن ضبط فتحات Y7 على 2.
- اطبع تكلفة Y6 على وحدة التحكم بجانب النص الآخر.
- اطبع تكلفة Y7 على وحدة التحكم بجانب النص الآخر.
- اطبع عدد الفتحات الخاصة بـ Y6 بجانب النص الآخر.
- اطبع عدد الفتحات الخاصة بـ Y7 بجانب النص الآخر.
- يجب أن يقوم البرنامج بإرجاع قيمة عند اكتماله بنجاح.
- نهاية نص الدالة main().
ما هي الدرجة الخاصة؟
لا يمكن الوصول إلى أعضاء الفصل الذين تم وضع علامة خاص عليهم إلا من خلال الوظائف المحددة داخل الفصل. لا يمكن لأي كائن أو وظيفة محددة خارج الفصل الوصول إلى هؤلاء الأعضاء مباشرة. لا يمكن الوصول إلى عضو الفئة الخاصة إلا من خلال وظائف الأعضاء والأصدقاء.
ما هي الفئة المحمية؟
يتمتع أعضاء الفصل الذين تم وضع علامة عليهم على أنهم محميون بميزة على أولئك الذين تم وضع علامة عليهم على أنهم خاصون. يمكن الوصول إليها عن طريق الوظائف ضمن فئة تعريفها. بالإضافة إلى ذلك، يمكن الوصول إليها من الفئات المشتقة.
مثال 2
#include <iostream>
using namespace std;
class ClassA {
public:
void set_a(int val);
int get_a(void);
private:
int a;
};
int ClassA::get_a(void) {
return a;
}
void ClassA::set_a(int val) {
a = val;
}
int main() {
ClassA a;
a.set_a(20);
cout << "Value of a is: " << a.get_a();
return 0;
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream في الكود الخاص بنا لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في الكود الخاص بنا لاستخدام فئاتها دون استدعائها.
- قم بإنشاء فئة تسمى ClassA.
- استخدم معدّل الوصول العام لوضع علامة على عضو الفصل المراد إنشاؤه على أنه يمكن الوصول إليه بشكل عام.
- قم بإنشاء الدالة المسماة set_a() والتي تأخذ قيمة عددية واحدة val.
- قم بإنشاء دالة باسم get_a().
- استخدم معدّل الوصول الخاص لوضع علامة على عضو الفصل الذي سيتم إنشاؤه على أنه يمكن الوصول إليه بشكل خاص.
- قم بتعريف متغير عدد صحيح يسمى a.
- نهاية الجسم الصفي.
- استخدم اسم الفصل ومشغل حل النطاق للوصول إلى الدالة get_a(). نريد تحديد ما تفعله الدالة عند استدعائها.
- يجب أن تقوم الدالة get_a() بإرجاع قيمة المتغير a عند استدعائه.
- نهاية تعريف الدالة get_a().
- استخدم اسم الفصل ومشغل حل النطاق للوصول إلى الدالة set_a(). نريد تحديد ما تفعله الدالة عند استدعائها.
- إسناد قيمة المتغير val إلى المتغير a.
- نهاية تعريف الدالة set_a().
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- قم بإنشاء مثيل ClassA وأعطه الاسم a.
- استخدم مثيل الفئة أعلاه والدالة set_a() لتعيين قيمة 20 للمتغير a.
- طباعة بعض النصوص بجانب قيمة المتغير a على وحدة التحكم. يتم الحصول على قيمة المتغير a عن طريق استدعاء الدالة get_a().
- يجب أن يقوم البرنامج بإرجاع القيمة عند اكتماله بنجاح.
- نهاية نص الوظيفة الرئيسية ().
مثال 3
#include <iostream>
using namespace std;
class ParentClass {
protected:
int value;
};
class ChildClass : public ParentClass {
public:
void setId(int x) {
value = x;
}
void displayValue() {
cout << "Value is: " << value << endl;
}
};
int main() {
ChildClass c;
c.setId(21);
c.displayValue();
return 0;
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream في الكود الخاص بنا لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في الكود الخاص بنا لاستخدام فئاتها دون استدعائها.
- قم بإنشاء فئة تسمى ParentClass.
- استخدم معدّل الوصول المحمي لوضع علامة على عضو الفصل المراد إنشاؤه على أنه محمي.
- قم بإنشاء متغير عدد صحيح يسمى القيمة.
- نهاية الجسم الصفي.
- قم بإنشاء فئة جديدة تسمى ChildClass التي ترث ParentClass.
- استخدم معدّل الوصول المحمي لوضع علامة على عضو الفصل الذي سيتم إنشاؤه على أنه يمكن الوصول إليه من قبل الفئات الفرعية.
- قم بإنشاء الدالة المسماة setId() والتي تأخذ قيمة عددية واحدة x.
- إسناد قيمة المتغير x إلى قيمة المتغير.
- نهاية تعريف الدالة setId().
- قم بإنشاء وظيفة باسم DisplayValue ().
- قم بطباعة قيمة المتغير المسمى value على وحدة التحكم بجانب النص الآخر.
- نهاية نص الدالة DisplayValue().
- نهاية نص الفصل المسمى ChildClass.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- قم بإنشاء مثيل لـ ChildClass وأعطه الاسم c.
- استخدم مثيل الفئة أعلاه والدالة setId() لتعيين قيمة 21 للمتغير x.
- استخدم مثيل الفئة أعلاه لاستدعاء الوظيفة المسماة DisplayValue ().
- يجب أن يقوم البرنامج بإرجاع القيمة عند اكتماله بنجاح.
- نهاية نص الوظيفة الرئيسية ().
وظائف أعضاء الفصل
تساعدنا الوظائف في معالجة البيانات. يمكن تعريف وظائف أعضاء الفئة بطريقتين:
- داخل تعريف الطبقة
- خارج تعريف الفئة
إذا كان من المقرر تعريف دالة خارج تعريف فئة، فيجب علينا استخدام عامل حل النطاق (::). ويجب أن يكون هذا مصحوبًا بأسماء الفئة والوظيفة.
مثال 2
#include <iostream>
#include <string>
using namespace std;
class Guru99
{
public:
string tutorial_name;
int id;
void printname();
void printid()
{
cout << "Tutorial id is: "<< id;
}
};
void Guru99::printname()
{
cout << "Tutorial name is: " << tutorial_name;
}
int main() {
Guru99 guru99;
guru99.tutorial_name = "C++";
guru99.id = 1001;
guru99.printname();
cout << endl;
guru99.printid();
return 0;
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream في برنامجنا لاستخدام وظائفه.
- قم بتضمين ملف رأس السلسلة في برنامجنا لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في الكود الخاص بنا لاستخدام فئاتها دون استدعائها.
- قم بإنشاء فصل دراسي باسم Guru99.
- استخدم معدّل الوصول العام لتحديد أعضاء الفصل الذي نحن على وشك إنشائه باعتبارهم متاحين للعامة.
- قم بإنشاء متغير سلسلة باسم Tutorial_name.
- أنشئ متغيرًا صحيحًا باسم id.
- قم بإنشاء وظيفة باسم printname(). لم يتم تعريف هذه الوظيفة ضمن تعريف الفئة.
- قم بإنشاء دالة باسم print(). يتم تعريف هذه الوظيفة ضمن تعريف الفئة. تمت إضافة جسمها ضمن تعريف الفئة.
- اطبع قيمة معرف المتغير بجانب النص الآخر على وحدة التحكم. لاحظ أنه تمت إضافة هذا داخل نص الدالة printid(). سيتم تنفيذه فقط عند استدعاء الدالة printid().
- نهاية نص الدالة printid().
- نهاية جسد الفصل Guru99.
- بداية تعريف الدالة printname() .
- قم بطباعة قيمة المتغير Tutorial_name على وحدة التحكم بجانب النص الآخر. لاحظ أنه تمت إضافة هذا داخل نص وظيفة printname(). سيتم تنفيذه فقط عند استدعاء الدالة printname().
- نهاية تعريف وظيفة printname().
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- قم بإنشاء مثيل للفئة Guru99 وإعطائه الاسم guru99.
- استخدم المثال أعلاه لتعيين قيمة C++ إلى المتغير Tutorial_name.
- استخدم مثيل guru99 لتعيين قيمة 1001 لمعرف المتغير.
- استخدم المثيل guru99 لاستدعاء الدالة printname() .
- اتصل بأمر النهاية (سطر النهاية) لطباعة سطر فارغ جديد على وحدة التحكم.
- استخدم المثيل guru99 لاستدعاء الدالة printid().
- يجب أن يقوم البرنامج بإرجاع القيمة عند اكتماله بنجاح.
- نهاية نص الدالة main().
البنائين والمدمرين
ما هو البنائين؟
البنيات هي وظائف خاصة تقوم بتهيئة الكائنات. ال C++ المجمعين يستدعي المنشئ عند إنشاء كائن. يساعد المنشئون في تعيين القيم لأعضاء الفصل. وبطبيعة الحال، هذا بعد أن تم تخصيص بعض مساحة الذاكرة لهم.
ما هو المدمرون؟
من ناحية أخرى، تساعد المدمرات في تدمير كائنات الفئة.
يجب أن يكون اسم المنشئ مشابهًا لاسم الفئة. ليس لدى المنشئين نوع إرجاع.
يمكن تعريف المنشئ داخل أو خارج نص الفصل. إذا تم تعريفه خارج نص الفصل، فيجب تعريفه باستخدام اسم الفصل وعامل حل النطاق (::).
مثال 3
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {
cout << "Class constructor called"<<endl;
}
~ClassA() {
cout << "Class destructor called"<<endl;
}
};
int main() {
ClassA a;
int p = 1;
if (p) {
ClassA b;
}
}
الإخراج:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- قم بتضمين ملف رأس iostream في الكود لاستخدام وظائفه.
- قم بتضمين مساحة الاسم std في الكود الخاص بنا لاستخدام فئاتها دون استدعائها.
- قم بإنشاء فئة تسمى ClassA.
- استخدم معدّل الوصول العام لتحديد العضو الذي نحن على وشك إنشائه على أنه يمكن الوصول إليه بشكل عام.
- إنشاء منشئ للفئة.
- النص الذي سيتم طباعته على وحدة التحكم عند استدعاء المنشئ. النهاية هي أ C++ الكلمة الأساسية، والتي تعني خط النهاية. يقوم بنقل مؤشر الماوس إلى السطر التالي.
- نهاية نص منشئ الفصل.
- إنشاء مدمر للفئة.
- النص الذي سيتم طباعته على وحدة التحكم عند استدعاء أداة التدمير. النهاية هي أ C++ الكلمة الأساسية، والتي تعني خط النهاية. يقوم بنقل مؤشر الماوس إلى السطر التالي.
- نهاية جسد المدمر.
- نهاية الجسم الصفي.
- استدعاء الدالة الرئيسية (). يجب إضافة منطق البرنامج داخل نص هذه الوظيفة.
- قم بإنشاء كائن فئة وأعطه الاسم أ. سيتم استدعاء المنشئ.
- قم بإنشاء متغير عدد صحيح يسمى p وقم بتعيين القيمة 1 له.
- قم بإنشاء كتلة عبارة if باستخدام المتغير p.
- قم بإنشاء كائن فئة وأعطه الاسم ب. سيتم استدعاء المدمر.
- نهاية نص عبارة if.
- نهاية نص الدالة main().
ملخص
- C++ هو كائن المنحى.
- تشكل الفصول السمات الرئيسية لـ C++ التي تجعلها موجهة للكائنات.
- A C++ يجمع الفصل البيانات وطرق معالجة البيانات في ملف واحد.
- الفئة هي مخطط لكائن ما.
- تحدد الفصول شكل الكائن.
- تُعرف البيانات والأساليب الموجودة في الفصل باسم أعضاء الفصل.
- للوصول إلى أعضاء الفصل، يجب عليك استخدام مثيل للفئة.
- لإنشاء فئة، نستخدم الكلمة الأساسية فئة.
- يمكن تعريف وظائف أعضاء الفصل داخل الفصل أو خارجه.








