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

تعليمية C++ الأساسية

تحكم في عملية C++

وظيفة C++

مجموعات C++ والكلمات المتكررة

هياكل بيانات C++

فئات C++ وكلاء

مؤشر C++

التكامل في C++

تعليمية STL C++

دليل مرجعي لـ C++

تحكم في وصول الوراثة في C++ (public,protected,private)

في هذا المقال، ستتعلم كيفية استخدام الوراثة العامة، والوراثة المُحصنة والوراثة الخاصة في C++، وسوف تتعلم من خلال الأمثلة أين وكيف تستخدمها.

يمكنك إعلان فئة فرعية من فئة أساسية تحتوي على وصفات وصول مختلفةالفئة،وهي العامةوراثة،وراثة مُحصنة أو وراثة خاصة.

#include <iostream>
using namespace std;
class base
{
.... ... ....
;
class derived : access_specifier base
{
.... ... ....
;

ملاحظة:يمكن استخدام الكلمات المفتاحية public، protected أو private بدلاً من access_specifier المستخدم في الكود السابق.معلق الوصول()).

تحكم في الوصول ووراثة

يمكن للفئة الفرعية الوصول إلى جميع العضويات العامة للفئة الأساسية. لذلك، إذا كان يُريد أن لا يتم الوصول إلى عضويات الفئة الأساسية من قبل أعضاء الفئة الفرعية، يجب أن يتم تعريفها كـ private في الفئة الأساسية.

نحن يمكن أن نلخص أنواع الوصول المختلفة بناءً على حقوق الوصول، مثل ما يلي:

الوصولpublicprotectedprivate
نفس الفئةyesyesyes
الفئة الفرعيةyesyesno
الفئات الخارجيةyesnono

الفئة الفرعية تنقل جميع الطرق الأساسية للفئات الأساسية، باستثناء الحالات التالية:

  • المُنشئ، المُدمِّر والمُكرر للفئة الأساسية.

  • وظائف محملة للفئة الأساسية.

  • وظائف صديقة للفئة الأساسية.

نوع الوراثة

عندما تُورث فئة من فئة أساسية، يمكن للفئة الأساسية أن تُورث ك public،protected أو private أنواع عدة. يتم تحديد نوع الوراثة من خلال مُعرف الوصول access-specifier الذي تم استعراضه أعلاه.

نحن نستخدم القليل جدًا protected أو private الوراثة، عادة ما يستخدم public الوراثة. عند استخدام أنواع مختلفة من الوراثة، يجب اتباع القواعد التالية:

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

  • الوراثة المحمية (protected): عندما تُورث فئةمحميةالفئات الأساسيةعامومحميةستصبح الأعضاءمحميةالأعضاء.

  • الوراثة الخاصة (private):عندما تُورث فئةخاصالفئات الأساسيةعامومحميةستصبح الأعضاءخاصالأعضاء.

الوراثة المتعددة

الوراثة المتعددة هي عندما يمكن للفئة الفرعية أن تكون لها عدة فئات آباء، وهي تورث خصائص عدة فئات آباء.

يمكن للفئات C++ أن تورث أعضاء من عدة فئات، وفقًا للنحو التالي:

class <اسم الفرعية>:<طريقة_وراثة1><اسم_الأساسية1>,<طريقة_وراثة2><اسم_الأساسية2>,…
{
<جسم الفرعية>
;

فيها، طريقة وراثة الوصول هي public،protected أو private أحد منها، يُستخدم لتمييز كل فئة أساسية، وتُفصل الفئات الأساسية بفاصلة، كما هو موضح أعلاه. دعونا الآن نرى المثال التالي:

#include <iostream>
 
using namespace std;
 
// فئة أساسية Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
;
 
// فئة أساسية PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return (area * 70);
      }
;
 
// فئة فرعية
class Rectangle: public Shape, public PaintCost
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
;
 
int main(void)
{
   مثلثُ مستطيل مستطيل
   int area;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
 
   area = Rect.getArea();
   
   // إخراج مساحة الكائن
   cout << "السطح الإجمالي: " << Rect.getArea() << endl;
 
   // إخراج تكلفة إجمالية
   cout << "تكلفة إجمالية: $" << Rect.getCost(area) << endl;
 
   return 0;
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتيجة التالية:

السطح الإجمالي: 35
تكلفة إجمالية: $2450