0Pricing
C++ Academy · درس

‏struct مقابل class: متى تستخدم كلًّا منهما

افهم الفرق الحقيقي الوحيد بين struct وclass، وطبّق الأعراف المناسبة.

‏struct مقابل class: متى تستخدم كلًّا منهما درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

الآلية نفسها، والقيم الافتراضية مختلفة

في C++، تتطابق struct وclass تقريبًا. والفرق الوحيد على مستوى اللغة هو محدِّد الوصول الافتراضي.

struct: عامة افتراضيًا

في struct، تكون الأعضاء عامة ما لم تُحدّد خلاف ذلك.

struct Point {
    int x;
    int y;
};  // x and y are public

class: خاصة افتراضيًا

في class، تكون الأعضاء خاصة ما لم تُحدّد على أنها عامة.

class Counter {
    int n_ = 0;       // private
public:
    void increment() { n_++; }
    int  value() const { return n_; }
};

اصطلاح، لا مجرد صياغة

يستخدم مجتمع C++ الكلمتين المفتاحيتين للتعبير عن القصد:

  • struct — بيانات محضة (شبيهة بـ POD، وجميعها عامة)
  • class — سلوك مغلّف (حالة خاصة مع واجهة عامة)

متى تستخدم struct

استخدم struct لتجميعات البيانات المحضة: الإحداثيات وألوان RGB والسجلات البسيطة.

struct Point { int x; int y; };
struct Color { unsigned char r, g, b, a; };
struct Person { std::string name; int age; };

متى تستخدم class

استخدم class عندما تكون لديك ثوابت يجب حمايتها، أو عندما تتغير الحالة عبر الدوال، أو عندما تحتاج إلى التغليف.

class BankAccount {
    double balance_ = 0.0;   // protected invariant
public:
    void deposit(double amount);
    bool withdraw(double amount);
    double balance() const;
};

تهيئة التجميعات

يمكن تهيئة البنى التي لا تحتوي إلا على أعضاء عامة باستخدام صياغة الأقواس المعقوفة — مع سرد القيم بترتيب التصريح.

struct Point { int x; int y; };
Point p1{3, 4};      // aggregate init
Point p2{.x = 3, .y = 4};   // designated init (C++20)

يختلف التوريث أيضًا

يكون التوريث عامًا افتراضيًا في struct وخاصًا افتراضيًا في class. صرّح به بوضوح عند الشك.

class B {};
struct D1 : B {};         // public inheritance
class D2 : B {};          // private inheritance

أعضاء مختلطون

رغم اختلاف القيم الافتراضية، يمكن لكلتا الكلمتين استخدام أقسام public وprivate وprotected.

struct Config {
private:
    int internalCount = 0;
public:
    std::string name;
    void incrementCount() { ++internalCount; }
};

قراءة الشيفرة من خلال الكلمة المفتاحية

عندما ترى struct، فتوقع حقول بيانات. وعندما ترى class، فتوقع منطقًا مغلفًا. تعامل مع الكلمة المفتاحية باعتبارها تلميحًا إلى قصد المؤلف.

أدلة الأسلوب

توصي معظم أدلة الأسلوب (Google وLLVM وISO C++ Core) باستخدام struct فقط للتجميعات المحضة التي لا تحتوي على ثوابت. وأي نوع يحوي دوال غير بسيطة يصبح class.

اختبار سريع

ما الفرق الوحيد على مستوى اللغة بين struct وclass في C++؟

مراجعة

استخدم struct لتجميعات البيانات المحضة، وclass للأنواع التي تحتوي على ثوابت وسلوك. والفرق الوحيد في اللغة هو مستوى الوصول الافتراضي — لكن العرف يتعامل معهما بشكل مختلف جدًا.

الأسئلة الشائعة

هل درس «‏struct مقابل class: متى تستخدم كلًّا منهما» مجاني؟

نعم — نص درس «‏struct مقابل class: متى تستخدم كلًّا منهما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏struct مقابل class: متى تستخدم كلًّا منهما»؟

افهم الفرق الحقيقي الوحيد بين struct وclass، وطبّق الأعراف المناسبة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «‏struct مقابل class: متى تستخدم كلًّا منهما»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏struct مقابل class: متى تستخدم كلًّا منهما
  2. متغيرات الأعضاء والطرائق
  3. المنشئات وقوائم تهيئة الأعضاء
  4. مؤشر this والتغليف
← العودة إلى C++ Academy