الهياكل في C++
الهياكل
هذا الفصل يحتوي علي :
مواصفات الهياكل و تعاريفها structure specifies and definitions
التعامل مع عناصر الهيكل Accessing structure members
الهياكل المتداخلة nested structures
الهياكل ككائنات وكنوع من البيانات structures as objects and data type
البيانات المعددة enumerated data types
تعرضنا إلي الأن لأنواع بسيطة من المتغيرات , كالمحارف والأعداد الصحيحة و الكسرية . وتعبر هذه المتغيرات عن بيان ما , كالطول أو درجة الحرارة . ولكن كما تعبأ البضائع في المجال في أكياس , ويجمع الموظفون في المنشآت في إدارات , وترتب الكلمات في جمل , فإنه من المفيد أن تجمع البيانات في تجمعات . وتتضمن لغة السي صورة من هذه التجمعات يسمي "الهيكل structure " ] ننوه إلي عدم الخلط بين مصطلح "هياكل البيانات data structures , كتجمعات معينة من البيانات مثل المصفوفات والمكادس والقوائم , مما سيرد ذكره خلال فصول الكتاب ويبين مصطلح " هياكل structures " كأحد أنواع هذه التجمعات [ .
الهياكل
الهيكل هو أحد أنواع هياكل البيانات , يمكن أن يضم أنواعا متغيرة من البيانات ] علي عكس المصفوفة التي لا يخزن فيها إلا بيانات متماثلة في النوع [ . ويسمي كل بيان يضمه الهيكل " عنصر memper" .
وقد جري العرف علي إعتبار الهياكل من الأنواع
المتقدمة في لغة السي , والتي يجدر تأجيل عرضها إلي مرحلة متطورة من الدراسة . ولكن بالنسبة للسي ++ , فإن الهياكل من الوحدات البنائية الرئيسية التي لها أثرها في فهم طبيعة الكائنات . إن صيغة الإعلان عن الهيكل هي في الواقع نفس صيغة الإعلان عن فئات الكائنات . فالهيكل هو تجمع لأنواع متعددة من البيانات , والكائن هو تجمع لأنواع متعددة من البيانات يمهد الطريق لفهم أعمق للكائنات . ويقوم "الهيكل" في لغة السي عامة مقام "السجل record " في كل من لغتي البيزك والباسكال .
الهياكل البسيطة
لنبدأ بهيكل يضم عددين صحيحين , وعدد كسري . يمثل هذا الهيكل أصنافا مخزنية لشركة ما , فهو قالب نمطي لوضع بيانات كل صنف . فأول عنصر من الهيكل هو رقم الصنف والعنصر الثاني هو الكمية المخزنة منه ,أما العنصر الثالث فهو سعر الوحدة منه .
والبرنامج التالي parts يوصف لنا هيكلا باسم part , ثم يعرف متغيرا هيكليا structure variable من هذا النوع يسمي part1 , ثم يخصص قيما لعناصره , ثم يظهر هذه القيم .
Parts.cpp
parts.cpp
// parts.cpp
// uses parts inventory to demonstrate structures
#include <iostream.h>
struct part // specify a structure
{
int modelnumber; // ID number of widget
int partnumber; // ID number of widget part
float cost; // cost of part
};
void main()
{
part part1; // define a structure variable
part1.modelnumber = 6244; // give values to structure members
part1.partnumber = 373;
part1.cost = 217.55;
// display structure members
cout << "\nModel " << part1.modelnumber;
cout << ", part " << part1.partnumber;
cout << ", costs $" << part1.cost;
}
ويكون خرج البرنامج علي الصورة التالية :
Model 6244, part 373, costs $217.55
وللبرنامج السابق ثلاثة نقاط نثيرها : توصيف الهيكل , تحديد متغير من نوعه , ثم التعامل مع عناصره .
توصيف الهيكل :
موصف الهيكل specifier يخبرنا عن كيفية تنظيمه , وعما يضمه من عناصر . وهو في برامجنا علي الصورة التالية :
Struct parts:
{
Int modelnumber ;
Int partnumber;
Float
} ;
ويمثل بالشكل التالي :
شكل صيغة توصيف الهيكل
ويطلق علي هذه الصيغة عادة "الإعلان declaration " عن الهيكل . علي أن هذا المصطلح يقصد به مفهوم أخر سنعرض له لاحقا , ومن ثم فسوف نستخدم مصطلح "التوصيف" منعا للبس .
صيغة توصيف الهيكل
الكلمة الحاكمة في توصيف الهيكل هو struct , ويتلوها اسم الهيكل , وهو في مثالنا هذا part . يتلو ذلك الإعلان عن عناصر الهيكل محتواه بين قوسين حلزونين ويتلو كل عنصر وكذا القوس الحلزوني المختتم للتوصيف , الفاصلة المنقوطة .
وننوه هنا إلي الفرق بين الفاصلة المنقوطة هنا واستخدامها في كتل الأوامر في الدوارات والدوال والعبارات الشرطية وغير ذلك , ففي الحالة الأخيرة تستخدم الفاصلات المنقوطة أيضا بعد الأوامر الداخلية للكتلة , ولكنها لا تستخدم بعد القوس النهائي لها .
ويبين الشكل الهيكل وعناصره .
التعريف بالمتغير الهيكلي
إن أول سطر في الدالة الرئيسية هو :
Part part1;
وهذا السطر يعرف متغيرا , أسمه part1 ليكون متغيرا هيكليا منتميا للهيكل المعلن عنه . كم يحجز لهذا المتغير من الذاكرة ؟ القدر الكافي لعناصره , عددين صحيحين وعدد كسري , وكل عدد صحيح يحجز له بايتان , والعدد لكسري أربعة بايتات , فيكون المجموع ثمانية بايتات . ويبين الشكل عناصر المتغير الهيكلي مخزنة في الذاكرة .
شكل الهيكل وعناصره
ويمكننا أن نتصور أن المتغير الهيكلي هو نوع جديد من المتغيرات , موضوع بواسطة المبرمج , وهو معني سوف يزداد لنا وضوحا مع تقدمنا في الشرح . ولكن يجب أن تلاحظ أن تعريف المتغير هو بنفس طريقة التعريف بالمتغيرات العادية , كما تتبين المقارنة التالية :
Part part1;
Int var1;
وليس هذا التوافق مصادفة , فقد روعي في لغة السي ++ أن تكون صيغة التعريف بأنواع المتغيرات التي يضعها المبرمج أقرب ما تكون في صياغتها واستخدامها مع التعريف بالأنواع الأولية الخاصة باللغة نفسها . (في لغة السي التقليدية يجب أن يتضمن تعريف المتغير الهيكلي الكلمة الحاكمة struct , ليكون التعريف علي الصورة struct part part2 , ولكن هذا الشرط ليس لازما في السي ++ كما تري )
شكل المتغير الهيكلي part1 مخزن في الذاكرة
تعليقات
إرسال تعليق