English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل الأساسيات C++

تحكم C++

الوظائف في C++

مجموعات C++ و 字وعات

مبادئ C++

فئات C++ و العناصر

المراجع في C++

الوراثة في C++

دليل STL C++

دليل C++

المؤسس في C++

في هذا المقال، ستتعلم بناء المكونات في C++. ستتعلم ما هو بناء المكونات وكيفية إنشائه وأنواع بناء المكونات في C++.

بناء المكونات هو نوع خاص من أعضاء الفئة، ويتم إنشاؤهالعنصرسيتم تحديثه تلقائيًا عند إنشاء العنصر.

يحدد البنيان المضيف البنيان المحدد كبناء المكونات من خلال اسمه ونوع العائد.

بناء المكونات يحمل نفس الاسم كما في الفئة ولا يحتوي على أي نوع عائد. بالإضافة إلى ذلك، يكون بناء المكونات دائمًا عامًا.

... .. ..
class temporary
{
private: 
    int x;
    float y;
public:
    // بناءً
    temporary(): x(5), y(5.5)
    {
        // جسم بناء المكونات
    }
    ... .. ..
};
int main()
{
    Temporary t1;
    ... .. ..
}

البرنامج المذكور أعلاه يظهر بناء المكونات المحدد، بدون نوع عائد، ويكون الاسم متطابقًا مع الفئة.

كيف يعمل بناء المكونات؟

في الكود المذكور أعلاه، temporary() هو بناء المكونات.

عند إنشاء عنصر للفئة، سيتم دائمًا استدعاء بناء المكونات temporary، وسيعتمد x على 5، ويتم تعيين y على 5.5.

يمكنك أيضًا تخصيص بناء المكونات كما هو موضح أدناه. ولكن لا يُنصح باستخدام هذا الأسلوب.

temporary();
{
   x = 5;
   y = 5.5;
}
// هذا الأسلوب ليس الخيار المفضل.

في C++ باستخدام بناء المكونات.

افترض أنك تعمل على 100 عنصر Person، وقد تم تعيين قيمة الت成员 age بشكل افتراضي إلى 0. إعادة تعيين جميع العناصر يدويًا سيكون مهمة معقدة.

على العكس، يمكنك تعريف بناءً يُعدل العمر 0. ثم، كل ما عليك القيام به هو إنشاء لاعب Person، حيث سيتم تعيين العمر تلقائيًا من قبل بناءً.

تظهر هذه الحالات عادةً عند معالجة مصفوفات اللاعبين.

إضافةً إلى ذلك، إذا كنت ترغب في تنفيذ بعض الأوامر بعد إنشاء اللاعب، يمكنك وضع الأوامر في جسم بناءً.

مثال 1: طريقة البناء في C++

احسب واعرض مساحة المربع.

#include <iostream>
using namespace std;
class Area
{
    private:
       int length;
       int breadth;
    public:
       // بناءً
       Area(): length(5), breadth(2){}
       void GetLength()
       {
           cout << "ادخل الطول والعرض بشكل منفصل: ";
           cin >> length >> breadth;
       }
       int AreaCalculation() { return (length * breadth); }
       void DisplayArea(int temp)
       {
           cout << "مساحة: " << temp;
       }
};
int main()
{
    Area A1, A2;
    int temp;
    A1.GetLength();
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);
    cout << endl << "مساحة افتراضية عند عدم الحصول على القيمة من المستخدم:" << endl;
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);
    return 0;
}

في هذا البرنامج، يتم إنشاء فئة Area لمعالجة الدوال المتعلقة بالمساحة. لديها عضوين بيانات طول (length) وعرض (breadth).

تم تعريف بناءً يُعدل طول (length) 5 وعرض (breadth) 2.

لدينا أيضًا ثلاث دوال عضوية إضافية GetLength(), AreaCalculation() و DisplayArea()، التي تحصل على الطول من المستخدم، تحسب المساحة وتظهر المساحة.

عند إنشاء اللاعب A1 وA2، بسبب علاقة البناء، يتم تعيين طول اللاعب A1 (length) وعرضه (breadth) وعرض اللاعب A2 (breadth) كـ 5 و2.

ثم، استدعاء دالة العضو GetLength()، التي تحصل على قيمة الطول (length) والعرض (breadth) من المستخدم من اللاعب A1. هذا يغير طول اللاعب A1 (length) وعرضه (breadth).

ثم، من خلال استدعاء دالة AreaCalculation() للاعب A1، احسب مساحة اللاعب A1 وضعه في متغير temp، وأخيرًا أظهره.

بالنسبة للاعب A2، لا يتطلب من المستخدم تقديم أي بيانات. لذلك، الطول (length) والعرض (breadth) يبقى 5 و2.

ثم، احسب واعرض مساحة A2 كـ 10.

نتيجة الإخراج

ادخل الطول والعرض بشكل منفصل: 6
7
مساحة: 42
مساحة افتراضية عند عدم الحصول على القيمة من المستخدم:
السطح: 10

بناءً على تحميل بناءً.

بناءً على بناءً يمكن أن يكون.بناءً على الطريقة المهمة.تحميل الطريقة.

بناءً على نفس الاسم (اسم الصف) لكن عدد المعلمات مختلف.

بناءً على عدد ونوع المعلمات المقدمة، سيتم استدعاء بناءً معينًا.

بسبب وجود العديد من بناء الكوبي كونструкторات، يجب أيضًا إرسال معاملات بناء الكوبي كونструкторة عند إنشاء العنصر.

مثال 2: بناء الكوبي كونструкторة المعدل

// عرض عمل بناء الكوبي كونструкторة المعدل
#include <iostream>
using namespace std;
class Area
{
    private:
       int length;
       int breadth;
    public:
       // بناء الكوبي كونструкторة بدون معاملين
       Area(): length(5), breadth(2) { }
       // بناء الكوبي كونструкторة مع معاملين
       Area(int l, int b): length(l), breadth(b){ }
       void GetLength()
       {
           cout << "ادخل الطول والعرض بشكل منفصل: ";
           cin >> length >> breadth;
       }
       int AreaCalculation() { return length * breadth; }
       void DisplayArea(int temp)
       {
           cout << "السطح: " << temp << endl;
       }
};
int main()
{
    المساحة A1, A2(2, 1);
    int temp;
    cout << "السطح الافتراضي عند عدم إرسال أي معاملات." << endl;
    temp = A1.AreaCalculation();
    A1.DisplayArea(temp);
    cout << "السطح عند إرسال (2,1) كمعامل." << endl;
    temp = A2.AreaCalculation();
    A2.DisplayArea(temp);
    return 0;
}

للعنصر A1، لن يتم إرسال أي معاملات عند إنشاء العنصر.

لذلك، سيتم استدعاء بناء الكوبي كونструкторة بدون معاملات، سيتم تعيين الطول (length) إلى 5، وسيعين العرض (breadth) إلى 2. لذلك، سيكون السطح للعنصر A1 هو 10.

للعنصر A2، سيتم إرسال 2 و1 كمعاملين عند إنشاء العنصر.

لذلك، سيتم استدعاء بناء الكوبي كونструкторة مع معاملين، سيتم تعيين الطول (length) إلى l (في هذه الحالة 2)، وسيعين العرض (breadth) إلى b (في هذه الحالة 1). لذلك، سيكون السطح للعنصر A2 هو 2.

نتيجة الإخراج

السطح الافتراضي عند عدم إرسال أي معاملات
السطح: 10
السطح عند إرسال (2,1) كمعامل
السطح: 2

بناء الكوبي كونструкторة الافتراضي

يمكن استخدام عنصر آخر من نفس النوع لتحديد بداية العنصر. هذا يشبه نسخ محتويات فئة واحدة إلى أخرى.

في البرنامج المذكور أعلاه، إذا كنت ترغب في تحديد شكل شكل A3 ليعكس نفس القيم مثل A2، يمكنك تنفيذ ذلك كما يلي:

....
int main()
{
   المساحة A1, A2(2, 1);
   // إعادة نسخ محتويات A2 إلى A3
   المساحة A3(A2);
     أو، 
   المساحة A3 = A2;
}

قد تظن أنك بحاجة إلى إنشاء مؤسس جديد لتنفيذ هذه المهمة. ولكن، ليس هناك حاجة إلى مؤسس إضافي. هذا لأنه بشكل افتراضي، يتم تضمين مؤسس النسخ في جميع الفئات.