إمرار الهياكل في ++C
إمرار الهياكل
قد تكون القيمة المرسلة هيكلا بأكمله , وفي المثال التالي سوف نستخدم هيكل الأبعاد الذي مر بنا في الفصل السابق , وسوف نجعل المستخدم يدخل المسافات , الأقدام ثم البوصات , ثم تظهرها الدالة الفرعية علي الشاشة بالنمط المعتاد .
engldisp.cpp
// engldisp.cpp
// demonstrates passing structure as argument
#include <iostream.h>
#include <conio.h>
struct Distance // English distance
{
int feet;
float inches;
};
void engldisp( Distance ); // declaration
void main()
{
Distance ucs1, ucs2; // define two lengths
// get length ucs1 from user
cout << "\nEnter feet: "; cin >> ucs1.feet;
cout << "Enter inches: "; cin >> ucs1.inches;
// get length ucs2 from user
cout << "\nEnter feet: "; cin >> ucs2.feet;
cout << "Enter inches: "; cin >> ucs2.inches;
cout << "\nucs1 = ";
engldisp(ucs1); // display length 1
cout << "\nucs2 = ";
engldisp(ucs2); // display length 2
getche();
}
// engldisp()
// display structure of type Distance in feet and inches
void engldisp( Distance ucs ) // parameter ucs of type Distance
{
cout << ucs.feet << "\'-" << ucs.inches << "\"";
}
وفي هذا البرنامج تتقبل الدالة الرئيسية القيم المدخلة , وتخزنها في الهيكلين d1, d2 ثم تستدعي الدالة الفرعية التي تتقبل الهيكل distance كمعامل لها , شأنه في ذلك شأن أي متغير عادي . وتقوم الدالة بإظهار قيم الهيكل بالصورة المعتادة , قدم ثم بوصة , فيكون الحوار بين المستخدم والبرنامج علي النحو التالي :
Enter feet: 6
Enter inches: 4
Enter feet: 5
Enter inches: 4.25
D1 = 6'-4''
D2 = 5' – 4.25''
تستدعي الدالة الرئيسية الدالة الفرعية مرتين , الأولي لإمرار الهيكل d1 والثانية لإمرار الهيكل d2 . وتقوم الدالة الفرعية بتخزين هذه القيم في كل مرة في الهيكل الذي تسميه dd , ثم تجري عليه الوظيفة التي وضعت لها .
وكما هو الحال في المتغيرات , فإن الهيكل الذي تتعامل معه الدالة الفرعية لا علاقة له بالهيكلين الخاصين بالدالة الأصلية , وبالتالي فلا تؤثر فيها لو غيرت الدالة الأولي من قيم هيكلتها .
وضوح التسمية في الإعلان
يمكن جعل الإعلان عن نمط الدالة أكثر وضوحا بأن تعطي المتغيرات المنقولة أسماء ذات معني يعبر عن ماهيتها . لنفرض أنك تنقل إحداثيات نقطة إلي دالة . بإمكانك الإعلان عن نمط الدالة بالصورة التالية :
Void display_point (int, int); // declaration
ولكن الصورة التالية تجعل الإعلان أكثر وضوحا :
Void display_point (int horiz, int vert); // declaration
حيث إنك بذلك قد أعطيت فكرة عن طبيعة القيم المنقولة , الأول يعبر عن الإحداثي الأفقي والثاني عن الرأسي , مما يجعل احتمال الخطأ في استخدامها أقل .
وليس للتسميات في الإعلان تأثير علي تسميتك للمتغيرات المنقولة في صلب البرنامج , فلك أن تستدعي الدالة بالأمر التالي :
Display_point (x, y); // function call
] كما لا يشترط التوافق بين هذين الاسمين وتسمية المعاملات في سطر التنويه [
تعليقات
إرسال تعليق