كتير منكن شاف في بداية البرامج كلمة #include, شو هادا طيب يا أخي؟ مع شو بياكلو؟؟ هادا بكل بساطة إستدعاء لمكتبة أو شي اسمو header file. لنفرض عنا البرنامج التالي:
#include <iostream.h>
class Time
{
public:
Time();
void setTime(int,int,int);
void printMilitary();
void printStandard();
private:
int hour;
int minute;
int second;
};
Time::Time()
{
hour = minute = second = 0;
}
void Time::setTime(int h,int m,int s)
{
hour = (h >= 0 && h < 24) ? h : 0;
minute = (m >= 0 && m < 60) ? m : 0;
second = (s >= 0 && s < 60) ? s : 0;
}
void Time::printMilitary()
{
cout<<(hour < 10 ? "0" : " ")<<hour<<":"<<(minute < 10 ? "0" : " ")<<minute
<<":"<<(second < 10 ? "0" : " ")<<second;
}
void Time::printStandard()
{
cout<<((hour == 0 || hour == 12) ? 12 : hour % 12)<<":"<<(minute < 10 ? "0" : " ")<<minute
<<":"<<(second < 10 ? "0" : " ")<<second<<(hour < 12 ? " AM" : " PM");
}
int main()
{
Time t;
cout<<"Initial military time: ";
t.printMilitary();
cout<<endl<<"Initial standard time: ";
t.printStandard();
t.setTime(13,27,6);
cout<<endl<<endl<<"Military time after setTime: ";
t.printMilitary();
cout<<endl<<"Standard time after setTime: ";
t.printStandard();
t.setTime(99,99,99);
cout<<endl<<endl<<"Military time after invalid setTime: ";
t.printMilitary();
cout<<endl<<"Standard time after invalid setTime: ";
t.printStandard();
cout<<endl;
return 0;
}هادا البرنامج متل مالنا شايفين بطبع الوقت يلي نحنا منعطي, ما بدنا هلأ شو عمل البرنامج. الأهم من هذا, إذا كان عنا مو class واحد, بل شي مئة class. إذا بدك تعدل شي فيه, ما أحلاك و الله و إنت عم تدور قطعة كود صغيرة ل class من بين مئة واحد و من بين ألف سطر كود. بس متل ما حكيت, في شي اسمو Header File, هدا الشي بدو يحتوي على class أو function أو كود لغرض معين. خلينا نعمل فايل اسمو time1.h و هو بدو يحتوي على تعريف ال class:
class Time
{
public:
Time();
void setTime(int,int,int);
void printMilitary();
void printStandard();
private:
int hour;
int minute;
int second;
};منعمل فايل تاني منسمي time1.cpp, و هو بدو يحتوي عمل ال functions تبع ال class:
#include <iostream.h>
Time::Time()
{
hour = minute = second = 0;
}
void Time::setTime(int h,int m,int s)
{
hour = (h > 0 && h <=24 ) ? h : 0;
minute = (m > 0 && m <= 60) ? m : 0;
second = (s > 0 && s <= 60) ? s : 0;
}
void Time::printMilitary()
{
cout<<(hour < 10 ? "0" : " ")<<hour<<":"<<(minute < 10 ? "0" : " ")<<minute
<<":"<<(second < 10 ? "0" : " ")<<second;
}
void Time::printStandard()
{
cout<<((hour == 0 || hour == 12) ? 12 : hour % 12)<<":"<<(minute < 10 ? "0" : " ")<<minute
<<":"<<(second < 10 ? "0" : " ")<<second<<(hour < 12 ? " AM" : " PM");
}منعمل هلأ Compile, بس شو منلاقي:
اقتباسTime' : is not a class or namespace nameerror C2065: 'hour' : undeclared identifier
error C2065: 'minute' : undeclared identifier
error C2065: 'second' : undeclared identifier
error C2653: 'Time' : is not a class or namespace name
error C2653: 'Time' : is not a class or namespace name
error C2653: 'Time' : is not a class or namespace name
طبعا ما رح يتعرف على ال Methods تبع ال class لأنو ما ستعيناه,منشان نستعي بس منضيف بعد #includ<iostream> السطر التالي:
#include "time1.h"
منعمل Compile كمان في خطأ, طبعا, مافي عنا ال main file يلي هو ال function الرئيسي للبرنامج. منعمل فايل جديد اسمو main.cpp:
#include <iostream.h>
#include "time1.h"
int main()
{
Time t;
cout<<"Initial military time: ";
t.printMilitary();
cout<<endl<<"Initial standard time: ";
t.printStandard();
t.setTime(13,27,6);
cout<<endl<<endl<<"Military time after setTime: ";
t.printMilitary();
cout<<endl<<"Standard time after setTime: ";
t.printStandard();
t.setTime(99,99,99);
cout<<endl<<endl<<"Military time after invalid setTime: ";
t.printMilitary();
cout<<endl<<"Standard time after invalid setTime: ";
t.printStandard();
cout<<endl<<endl;
return 0;
}منعمل Compile, الله كلو شغال. بهل عملية إذا بدك تعدل شي بال class بس عليك تفتح ال time1.h و تعدل فيه. طبعا وقت تعمل Compile ال Compiler لحالو بربط ما بين time1.h و time1.cpp و main.cpp
إن شاء الله تكونوا استفدتوا