اقتباس

Breakpoint

الـ breakpoint هي نقطة يضعها المبرمج عند أحد أسطر البرنامج ، تخبر الـ debugger أن يوقف البرنامج عند هذا السطر ويمكن معرفة حالة وقيمة المتغيرات عند هذا الوقت أي قبل تنفيذ الأسطر التالية؛ لها أكثر من فائدة مثلًا معرفة هل تم المرور على هذا الـ Block مثل Block الـ if ، أي هل تم تنفيذ مابداخله أو ماقيمة هذا المتغيّر في هذا الوقت من البرنامج كذلك معرفة قيم الـ Array كاملة وأيضّا معرفة قيمة العدّاد والرقم الذي توقّف عنده .

 إذا لم يقف البرنامج يعني أنه لم يمر على هذا السطر إما بسبب شرط if أو loop أو غير ذلك من الأسباب. 

إحدى طرق إضافتها في الكود : تقف عند السطر الذي تريده ، زر الفأرة الأيمن ، ثم اختيار insert break-point .

مثال :

في المثال نقرأ من المستخدم رقم ، نرسله للدالة ، الدالة تقسمه على 2 وتعيد الجزء الصحيح منه ، إذا كانت القيمة 1 فمافوق سيتم طباعة العبارة أما إذا كانت 0 ، لن يتم تنفيذ Block الـ if .

الـ Array في هذا المثال فقط حتى نرى العداد وصل إلى أي عدد ، ونرى قيم الـ Array كاملة .

#include <iostream>
#include <string>
using namespace std;

int fun(int num)
{
 return num / 2;

}
void main()
{
 //Breakpoint Example

 int num;
 cout << " Enter num: ";
 cin >> num;

 int Array[5];
 for (int i = 0; i < 5; i++)
 Array[i] = num *i;

 if (fun(num))
 {
 cout << "The number is greater than or equal 2" << endl;
 }
 system("pause");
}

قمت بوضع الـ breakpoint في السطر رقم 23 

أدخلت الرقم 3 ، في الأسفل نرى  قيم المتغيرات .

1 2 3 4 6 7 8

 

أدخلت رقم 1 ، ولم يحدث شيء لأن البرنامج لم يدخل الـ if أي لم يمر على الـ breakpoint.

Advertisements

Statcic and Const data member and Const function

أنشِئ Class :

اسمه: Patient

المتغيرات : Name , Age , ID , DoctorName

:يحوي  Parameterized constructor و Display function “لطباعة معلومات كل مريض “.

-Get function , Display function يجب أن تكون read only .

-ID الخاص بكل مريض يتم إنشاؤه أوتوماتكيًا ولايمكن تغييره .

–قم بفصل الـ Class interface  في header file و Class implementation في cpp file

*في Main function أنشِئ 3 objects وأطبع معلوماتهم.

الحل:

المقصود بـ read only هي أن تكون constant function وهذا النوع من الـ functions لايمكنه تغيير قيمة أي متغير ، مثال لايمكن كتابة هذه الجملة داخل هذا النوع من الدوال : Name = “Amjad” >> “Error.

إنشاء الـ ID أتوماتيكيًا يتم عن طريق تعريف static data member بحيث أن static هو متغيّر عام تشترك فيه كل objects لهذا الـ class وليس خاص لكل object ، بحيث أن كل تغيير على static تستطيع أن تراه كل الـ objects .

-ID يكون const حتى لايتم تغييره ، وبذلك لايحتاج إلى set function لأنه لايمكن التعديل عليه .

//.h
#include <iostream>
#include <string>
using namespace std;

class patient
{
 string Name;
 float age;
 const int ID; //const ID
 string doctorName;
 static int num; // stataic var. to generate the ID automatically
public:

 patient(string, string, float); //Parameterized constructor 

//set functions 
 void SetName(string);
 void SetdoctorName(string);
 void Setage(float);

//read only get functions
 string GetName() const;
 string GetdoctorName() const;
 float Getage() const;
 int GetID() const;

//const display function
 void Display() const;
};
-----------------------------------------------------------------
//.cpp
#include <iostream>
#include <string>
#include "patient.h"
using namespace std;

int patient::num = 0; //initialize static data memebr

////Parameterized constructor 
//initialize the data members using initializer list
patient::patient(string N, string DN, float A) :Name(N), doctorName(DN), age(A), ID(++num){}//initialize ID by num

//set functions
void patient::SetName(string N){ Name = N; }
void patient::Setage(float A){ age = A; }
void patient::SetdoctorName(string DN){ doctorName = DN; }

//const get functions
string patient::GetName() const{ return Name; }
string patient::GetdoctorName() const { return doctorName; }
float patient::Getage() const{ return age; }
int patient::GetID() const { return ID; }


//const display function
void patient::Display() const
{
 
 cout << "Your ID: " << GetID() << endl;
 cout << "Your Name: " << GetName() << endl;
 cout << "YOur Age: " << Getage() << endl;
 cout << "Your D. Name: " << GetdoctorName() << endl << endl;
}
------------------------------------------------------------
//main.cpp
#include <iostream>
#include <string>
#include "patient.h"
using namespace std;


void main()
{
 string Name[3], doctorName[3]; float age[3];

//read the info
 for (int i = 0; i<3; i++)

 {
 cout << "you are patint #" << i + 1 << endl;
 cout << "Enter Your Name: ";
 cin >> Name[i];
 cout << "Enter YOur Age: ";
 cin >> age[i];
 cout << "Enter Your D. Name: ";
 cin >> doctorName[i];
 cout << endl;
 }

//create objects
 patient obj1(Name[0], doctorName[0], age[0]);
 patient obj2(Name[1], doctorName[1], age[1]);
 patient obj3(Name[2], doctorName[2], age[2]);

//print info
 obj1.Display();
 obj2.Display();
 obj3.Display();

 system("pause");

}




-السطر 38 طريقة تعريف static  في cpp.

-السطر 42 يحوي طريقة initialize ID باستخدام static data member.

مثال copy constructor و فصل interface عن implementation

أنشِئ Class :

اسمه:  Date 

المتغيرات : Day , Month , Year

الدوال الإضافية  : Display function “لطباعة التاريخ “

:يحوي   Parameterized constructor  و Copy constructor

-قم بفصل الـ Class interface  في header file و Class implementation في cpp file 

 في Main funtion :

أطلب من المستخدم إدخال اليوم والشهر والسنة ثم أنشِئ object وأملأه بالمعلومات المُدخلة ، ثم أطبع التاريخ ، بعد ذلك أنشِئ object آخر يحمل نفس معلومات الـ object  الأول ثم أطبع التاريخ للـ object الثاني.

الحل:

//.h
class Date
{
 int Day, Month, Year;
public:
 Date(int, int, int); // Parameterized constructor
 Date(const Date &); //Copy constructor

 ~Date(); //destructor

//set functions
 void SetDay(int);
 void SetMonth(int);
 void SetYear(int);

//get functions
 int GetDay();
 int GetMonth();
 int GetYear();

//dispaly
 void Display();

};

-----------------------------------------------------
//.cpp
#include <iostream>
#include "Date.h"
using namespace std;

// Parameterized constructor
Date::Date(int D, int M, int Y){ SetDay(D); SetMonth(M); SetYear(Y); }

//Copy constructor
Date::Date(const Date &obj)
{
 SetDay(obj.Day); SetMonth(obj.Month); SetYear(obj.Year);
}

Date::~Date(){ }

void Date::SetDay(int D) { Day = D; }
void Date::SetMonth(int M){ Month = M; }
void Date::SetYear(int Y) { Year = Y; }

int Date::GetDay(){ return Day; }
int Date::GetMonth(){ return Month; }
int Date::GetYear(){ return Year; }

void Date::Display()
{
 cout << "The Date is is: " << GetDay() << "\\" << GetMonth() << "\\" << GetYear() << endl;
}
-------------------------------------------------------
//main
#include <iostream>
#include "Date.h" //must include
using namespace std;

void main()
{
 int Day, Month, Year;

 cout << "Ente the Day: "; cin >> Day;
 cout << "Ente the Month: "; cin >> Month;
 cout << "Ente the Year: "; cin >> Year;

//initialized by Parameterized constructor
 Date obj1(Day, Month, Year);
 obj1.Display();

//initialized by copy constructor
 Date obj2(obj1);
 obj2.Display();

 system("pause");
}