الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال:عملHeader File

مغلق
بدأه مبرمجة مبتدئة في 23 أبريل 2006 · 8 رد · 763 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

قبل أن أقوم بكتابة هذا الموضوع بحثت في هذا القسم عن مطلبي ولكن وجدت مواضيع عن

header Fileالاساسية

ومااريده هو عمل هيدرفايل خاص بـ class الذي قمت بعمله

ولكن هناك مشكلة اني عند عملي جميع الدوال والمتغيرات في البرنامج وضعتهاglobal

فمالعمل عند انشاء هيدر فايل خاص فيه هل سيتطلب مني تصريح للمتغيرات من جديد ؟

وهل استطيع ربطه بـ البرنامج دون أن اعمل تصريح جديد للمتغيرات؟؟

وهل يعتبر عيب في البرنامج عندما لاارسل شي للدوال واصرح عن الجميع global؟

iwo3e5b2.gif

اللهم اغفر لجميع المسلمين والمسلمات الاحياء منهم والأموات.

#2

عن نفسي، حبذا إستخدام المتغيرات Global .

بالنسبة للسؤال يمكن استخدام الكلمة extern data type name of the variable بدون تعريف المتغير ثانياً

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#3

شكرا جزيلا سأقوم بالتجربة.

تم تعديل هذه المشاركة بواسطة مبرمجة مبتدئة في 23 أبريل 2006 في 15:31

iwo3e5b2.gif

اللهم اغفر لجميع المسلمين والمسلمات الاحياء منهم والأموات.

#4

شكرا وضعتهم privateلأنها جميعا متعلقه بـfunctionالي عندي وانحلت المشكلة.

لكن لدي سؤال يوجد اشياء اعملها لكن لاعلم ما الفائدة منها؟!:

السؤال الأول:

لماذا نضع في بداية ملف الهيدر فايل:

#ifndef ClassName_H
#define ClassName_H

والسؤال الثاني:

عند اعمل ملف للـ main وابدأ بتشغيله لايعمل إلا عندما افتح ملف جديد واضع فيه Class?

(لماذا لااكتفي بملف الـ main والـ Header File)؟

وشكرا للجميع.

iwo3e5b2.gif

اللهم اغفر لجميع المسلمين والمسلمات الاحياء منهم والأموات.

#5

السلام عليكم ورحمة الله وبركاته

بالنسبة للسؤال الاول وهو اضافة الكود التالى فى بداية الهيدر فايل

#ifndef ClassName_H
#define ClassName_H

ده بنضيفه علشان لو فى اكتر من حاجه بتستخدم نفس الملف يعنى لو عاملين include للهيدر فايل ده فى ملف .cpp مثلا وعاملين للملف ال .cpp ده include فى ملف تانى او لو فى اكتر من ملف .cpp حاطين فيه include لنفس الهيدر فايل

الكود ده وظيفته انه بيعرف الدوال اللى جوه الهيدر الفايل مره واحده فى حالة استدعائه

يعنى اول مره بنستدعى داله من ال class اللى فيه مثلا فبيختر الشرط اللى هو #ifndef ClassName_H

فاذا كانت غير معرفه وده معناه انها لم تستدعى قبل كده هايعرفها

فى المره التانيه هايجى يستدعيها هيلاقى ان الشرط متحقق وده معناه انها تم استعدائها قبل كده فمش هايعرفها تانى

- يعنى الكود علشان تلافى الخطا من تعريف الكلاس فى كل مره يتم استدعاء داله منها

بصراحه الشرح ده انا متاكد منه بنسبة 80 فى المائه فقط واتمنى حد تانى يحط شرح للتاكد والافاده للجميع

بالنسبة للسؤال التانى انا مش فاهمه بصراحه ياريت توضحى اكتر

هل تقصدى انه مش بيشتغل الا عند عمل ملف .cpp وتعملى فيه include للهيدر فايل وبعد كده تعملى include للملف ال .cpp جوه نفس البرنامج

#6

كلام أخي m_gabr_1985 سليم لكن عندي طريقة أخرى لتوضيح النقطة .

عندما نكتب في بداية ملفنا

#ifndef ClassName_H

هنا نفحص اذا كنّا قد عرّفنا شيء بإسم ClassName_H أم لا ، ومعنى الشرط أعلاه هو : اذا لم يعرّف.

حسن، اذا لم يعرف سنقوم بتعريفه، لنضمن أنه اذا كررنا الاستدعاء للملف لن يتحقق الشرط أعلاه (اذا لم يعرّف) لأننا قد عرفناه.

الآن كل شيء تمام لكن السؤال: اين الشرط الذي يمنع التكرار، نحن لا نرى إلا شرط يسألنا اذا كان هذا المتغير معرف اذا لا يقوم بتعريفه!!!

طيب باقي دوال وكلاسات الملف ما الذي سيمنعها من أن تنفذ مرة أخرى؟؟

الجواب:

في نهاية الملف ستجد هذه الجملة:

#endif

كل الأشياء التي بين ifndef ClassName_H# وبين endif# لن تنفّذ إلا اذا كان الشرط ifndef ClassName_H# صحيح..

مثلا:

#ifndef ESMAEEL
#define ESMAEEL
Clsass Esmaeel 
{
.....
.
.
.

.
.
.
.
.}
....
{
.
.
.....
.
.
. هذا كود بلغة سي\سي++
لن يتم التطرق اليه اذا لم يتحقق الشرط  أعلاه..
كل الكود هنا منذ 
ifndef
حتى
endf 
متعلق بتحقق الشرط
.
.
.

.
.}
#endif
#7

m_gabr_1985

شكرا و جزاك الله كل خير

مبرمجة مبتدئة كتب:
والسؤال الثاني:

عند اعمل ملف للـ main وابدأ بتشغيله لايعمل إلا عندما افتح ملف جديد واضع فيه Class?

(لماذا لااكتفي بملف الـ main والـ Header File)؟

اقتباس
هل تقصدى انه مش بيشتغل الا عند عمل ملف .cpp وتعملى فيه include للهيدر فايل وبعد كده تعملى include للملف ال .cpp جوه نفس البرنامج

حتى يكون السؤال واضح:

يكون لدي ثلاث ملفات:

1-الهيدرفايل(File.h)

2- ملف آخر: توجد فيه الدالة Mainوطبعا يوجد فيه

#include "name.h"

(File1.ccp)

3-ملف ثالث:يوجد فيه الـclass وفيه

#include "name.h"

(File2.ccp)<------هذا الملف مالفائدة منه؟وبدونه برنامجي لايعمل؟؟؟؟

إسماعيل ابراهيم

شكرا جزيلا الفكرة وصلت بشرحك الميسر.

ولكن:

هل هكذا تكتب الدوال الموجودة في المكتبات الاصلية مثلiostream.h

كدالة الطباعة في برنامج مثلا :

لماذا لاتكتبClassNameOf Print.cout

ClassName:

عبارة عن اسم الـclass الموجود داخله دالة الطباعة لماذا لاضعه؟

(واعلم انه عند عدم وضع .h تكون غير معرفة ويجب أن اعرفها globalهكذا:

using namespace std;

)

لماذا ومالفرق بينها وبين الهيدرفايل الذي يعملها المستخدم؟

وجزاكم الله كل خير وجعل مساعدتكم لي رفعة في درجاتكم.

تم تعديل هذه المشاركة بواسطة مبرمجة مبتدئة في 26 أبريل 2006 في 17:06

iwo3e5b2.gif

اللهم اغفر لجميع المسلمين والمسلمات الاحياء منهم والأموات.

#8

لم أفهم سؤلك.؟

لماذا ومالفرق بينها وبين الهيدرفايل الذي يعملها المستخدم؟

لا يوجد فرق...

أما عن الجملة

using namespace std;

فهي تتعلق بموضوع namespaces وهو كتلة تحتوي على الكلاسات. ودوال داخلها :

مثلا:

namespace Esmaeel 
                                {
                                  void Print(char) {do some thing;}

                              class myclass
                                         {
                                             private:
                                                     int x,y,h,w;
                                              public:
                                                  mymethod() 
                                            } // End class
                             }           //End namespace

لكي نستخدم الدالة Printيجب أن نكتب ;( Esmaeel.Print(dddd

Esmaeel.Print();

أو نكتب قبلها :

;using Esmaeel

ثم نستعمل print مباشرة..

شرح سريع ارجو الا أكون قد وقعت في أخطاء.

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 26 أبريل 2006 في 17:49

#9

شكرا وصل ما اريد..جزاك الله خيرا

iwo3e5b2.gif

اللهم اغفر لجميع المسلمين والمسلمات الاحياء منهم والأموات.

هذا الموضوع مغلق.

مواضيع مشابهة