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

** ال Class..؟ في ال C++ ...

مغلقرائج
بدأه :: إسـتبرق C++ :: في 8 أغسطس 2005 · 11 رد · 20,258 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أسئله أتمنى تكون سهله و خفيفه ،

وهـي ما الفرق بين الـ Constructors and Destructors ؟؟

و Set and Get Functions ؟؟ يعني كيف نستخدمهم ..؟؟ :blink:

و من هي الـ friend function ??

ووووووو آخــر سؤال :rolleyes:

ليش نحط هذه العلامه ( :: ) :wacko: في كتابة البرنامج في الـ Class ...؟؟

وسـلامي وكل تحياتي ..

والشكر المقدم لتعاونكم ..

إسـتبرق C++ ..

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#2

السلام عليكم

راح أحاول أرد على أسئلتك وإن شاء الله تكون أجوبتي صحيحه

ولو اني أتوقع ان أجوبة أسئلتك موجوده ضمن قائمة الدروس اللي منزلينها في القسم

ما الفرق بين الـ Constructors and Destructors ؟؟

الـ constructors هو عباره عن باني

اسم لداله توضع في الـ class يتم من خلاله تعريف المتغيرات التابعه للـ class ويحمل نفس اسم الـclass

ويتم استدعائه في الـ main program بكتابة اسمه والمتغيرات المقابله للمتغيرات المعرفه فيه

أما الـ Destructors فهو هادم .. ويحمل أيضا نفس اسم الـ class لكن يكون مسبوق بعلامة (~)

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

-------------------------------------------------------------

Set and Get Functions ؟؟ يعني كيف نستخدمهم ..؟؟

اذا كان تعريف المتغيرات في داخل الـ class من النوع الخاص (Private) في هذه الحاله لايمكن الوصول لهذه المتغيرات مباشرة من خلال استدعائهم في الـ main program

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

وهي الداله set

اما get يتم تعريفها في داخل الكلاس وتستدعى في حال أردنا القيام بعمليات حول المتغيرات الخاصه

مثلا

عندي البرنامج اللي يحسب مساحة للمستطيل

نفرض هنا تعريف الكلاس :

class rect
{private :
     int itsw;
     int itsl;
 public:
 rect(int initl,int initw)
       {
      itsl=initl;
      itsw=initw;
       };
   ~rect() {};
    public :
void setrect(int l,int w )
{
itsl=l;
itsw=w;
  }
  int getrect();

};//end class

عرفنا الطول والعرض متغيرات (private)

وعرفنا دالة set على انها public ( لاحظ الـ constractor والـ destructor ) قبل الـ set

وضعنا المدخلات للداله متغيرات حتى نربطها بمتغيرات الـ main بعد الاستدعاء وقمنا بتعريف كل متغير خاص بأحد هذه المدخلات

لأن البرنامج الرئيسي لايستطيع الوصول للمتغيرات المعرفه في الـ praivate مباشرة ولازم تكون فيه الداله set حتى تقوم بربط المتغيرات في البرنامج الرئيسي بالمتغيرات الخاصه

أما الداله get وضعتها لك بدون متغيرات لكن بما ان الداله تم تعريفها في داخل الكلاس فهذه الداله تكون متعرفه على المتغيرات الخاصه للكلاس نفسه

بعد تعريف الكلاس

حطيت هذا الكود

rect::getrect()
{return (itsl*itsw);
}

void main()
{
int l,w;
rect r(0,0);
 cout<<" Enter the high : ";
 cin>> l;
  cout<<" Enter the wight : ";
  cin>> w;
r.setrect(l,w);
cout<< " The result is : " << r.getrect();
getch();

}

يتم استدعاء الداله المعرفه داخل الكلاس في خارج الـ main كالتالي

class name :: function name

وعرفت كود اجراء عملية ضرب للمتغيرات بدون تعريف للمتغيرات لأن الداله get متعرفه عليها

وبكذا استدعيت الدوال في داخل البرنامج الرئيسي

أتمنى أفدتك

وشكرا

#3

السلام

مشكوره اختي على شرح :D

شرحج ممتاز وجزاج الله خير ;)

بس حبيت ازيد عليج بالنسبه حق friend function

هذا مثال بالنسبه للاخ الي سأل عنه

// Example of the friend class

 class YourClass
 {
  friend class YourOtherClass;  // Declare a friend class
	private:
   	 int topSecret;
 };

//Example of friend functions

// Point.h file 
class Point {
    friend GetCoordinates();
    public:
        Point();
        Point(int x1, int y1)
    . . .

// Point.cpp file 
. . .
GetCoordinates();
{

}

اتمنى يكون واضح واي شرح انا حاضر اما لباقي اسئلتك اخت اعتقد عطتك حقهم وزياده... :rolleyes:

تم تعديل هذه المشاركة بواسطة HGB في 9 أغسطس 2005 في 22:12

#4

الشكر الكبير والعميق على الشرح الحلو ..

ولكنني ضيعت شوي في ( الفرند فنكشن والكلاس ) :(

ياريت أخوي توضحهم لي بشكل كلام ، و مو شرط عميق عميق :rolleyes:

سأعود ولدي بعض التعليقات بإذن الله ..

سلامي

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#5

frind function

هي عباره عن داله تتعامل مع المتغيرات الخاصه بالكلاس نفسه

ولكن تعريف الكود والعمليات اللي بداخلها يتم خارج الكلاس

>> أنا عن نفسي أستخدمها بهذي الطريقه

class mango_box
{
friend mango_box operator-(const mango_box & m,const mango_box & n);
 private :
    int b_num;
 public :
 .
 .
 .
 .

  };// end class

عرفت داله لمعامل الطرح ولازم تعريف الداله يسبقه كلمة ( friend ) للاعلان بأن هذه الداله هي داله صديقه (friend function)

وعرفت مدخلين لهذه الداله .. بدون ذكر الكود الخاص بهذه الداله

وقبل البدايه في كتابة البرنامج الرئيسي

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

mango_box operator-(const mango_box & m,const mango_box & n)
  {  mango_box s(m.b_num-n.b_num);
  return s;};

  void main()
{
.
.
.
.

    }

لاحظ تعريف الداله .. تكون المدخلات هي نفسها

عرفت الكود الخاص بالداله وهو يتعامل مع (b_num ) وهذا المتغير هو المتغير الخاص بالكلاس

الدوال الصديقه تقدر تستغني عنها في بعض الاحيان وتعرفها مباشرة بالكلاس

وماتحتاج في هذه الحاله لتعريف مدخلات للداله .. لأنك راح تكون معرفها في داخل الكلاس وتكون الداله متعرفه على المتغيرات الخاصه في داخل الكلاس

لكن لو انت راح تعرف داله تتعامل مع المتغيرات الخاصه بالكلاس نفسه وماتبي تعرفها في داخل الكلاس تحط لها تعريف بسيط زي ماوضحت لك في المثال السابق وتسبقها بكلمة (friend ) وبعد ماتنتهي من تعريف الكلاس وقبل تبدأ تعريف البرنامج الرئيسي تكتب الكود للداله الصديقه بدون الحاجه لتعريف اسم الكلاس قبل اسم الداله

لاحظ اني كتبت بالتعريف بعد انتهاء الكلاس

......mango_box operator-(const mango_box

وماكتبت

.....mango_box : : mango_box operator-(const mango_box

هذه افادتي والله أعلم

وانا عن نفسي أحاول أبرمج بدون استخدام مفهوم الدوال الصديقه غالبا

إن شاء الله تكون فهمت

تحياتي

#6

انا كنت بشرحلك مثالي بس الاخت مبرمجه سي شرحتلك بما يكفي على ماعتقد جزاها الله الف خير

وشكرا..

#7

ممتاز ..

تسلمي أختي مبرمجة سي ، والله يعطيك العافيه ..

وكذلك أخي CoMPuTeR-SCIeNCe ما تقصر وجزاك الله خيراً ..

ولكنني أحببت أن ألفت إنتباه مبرمجة سي ..

في البرنامج الأول نهايته وضعتِ getch(); ..

لماذا ..؟؟

حيث إنها لا تكون صحيحه عند تنفيذ البرنامج .. وعند حذفها يتم تنفيذ الكومبايلر ..

#include<iostream.h>


class rect
{private :
    int itsw;
    int itsl;
public:
rect(int initl,int initw)
      {
     itsl=initl;
     itsw=initw;
      };
  ~rect() {};
   public :
void setrect(int l,int w )
{
itsl=l;
itsw=w;
 }
 int getrect();

};//end class

rect::getrect()
{return (itsl*itsw);
}

void main()
{
int l,w;
rect r(0,0);
cout<<" Enter the high : ";
cin>> l;
 cout<<" Enter the wight : ";
 cin>> w;
r.setrect(l,w);
cout<< " The result is : " << r.getrect();


}

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#8

أتمنى أخوتي ألاقي منكم ، حل لمشكلتي :blink: ..

وهي هذه البرامج ، لا يتم تنفيذها في الكومبايلر ..

مع إن البرنامج صحيح 99 % ، و تعبت وأنا أحاول في تصحيحه ،

ولا أدري لماذا هذا الخلل ...........؟؟؟؟؟ :(

تفضلوا ..

#include<iostream.h>

class patient{

private:
	char _name;
	int _heartRate;
	double _moneyowed;

public:
	patient();  //default constructor
	patient(char,int heartRate=0,double moneyowed=0.0);
	~patient();
	void setheartRate(int);
	int getheartRate();
	void setmoneyowed(double);
	double getmoneyowed();
	void setname(char);
	char getname();

	};

	patient::patient()
	{
  _heartRate=0;
     _moneyowed=0.0;
	}
	patient::patient(char name,int heartRate=0,double moneyowed=0.0)
  : _name(name)
	{
   _heartRate=heartRate;
   _moneyowed=moneyowed;
	}

	patient::~patient()
	{}

	void patient::setheartRate(int heartRate)
	{
  _heartRate=heartRate;
	}

	int patient::getheartRate()
	{
  return _heartRate;
	}

	void patient::setmoneyowed(double moneyowed)
	{
  _moneyowed=moneyowed;
	}

	double patient::getmoneyowed()
	{
  return _moneyowed;
	}

	void patient::setname(char name)
	{
  _name=name;
	}

	char patient::getname()
	{
  return _name;
	}


	int main()
	{

  patient pat("john",70,0.0);
  cout<<"patient "<<pat.getname()<<"owes"<<pat.getmoneyowed()<<endl;
  cout<<"his hesrt rate is "<<pat.getheartRate()<<endl;

  pat.setmoneyowed(1000.0);
  pat.setheartRate(140);
  cout<<"patient "<<pat.getname()<<"owes"<<pat.getmoneyowed()<<endl;
  cout<<"his hesrt rate is "<<pat.getheartRate()<<endl;

  return 0;
	}

وهذا هو البرنامج الآخر ..

#include <iostream.h>


class rectangle{

private:
	float itslength;
	float itswidth;

public:
	reactangle();
	rectangle(float width,float length);
	~rectangle();
	void setwidth(float);
	float getwidth();
	void setlength(float);
	float getlength();

	float area();
	float perimeter();

};

float rectangle::rectangle(float,float)
: itswidth(4.0),
itslength(7.0)
{}

rectangle::reactangle(float width,float length)
{
	itswidth=width;
	itslength=length;
}

rectangle::~rectangle()
{}

void rectangle::setwidth(float wid)
{
	itswidth=wid;
}

float rectangle::getwidth()
{
	return itswidth;
}

void rectangle::setlength(float len)
{
	itslength=len;
}

float rectangle::getlength()
{
	return itslength;
}

float rectangle::area()
{
	float area=getlength()*getwidth();
	return area;
}

float rectangle::perimeter()
{
	float per=2*(getlength()+getwidth());
	return per;
}


void main()
{
	rectangle theRec;
	cout<<"theRec is "<<theRec.getlength()<<"feet long."<<endl;
	cout<<"theRec is "<<theRec.getwidth()<<"feet wide. "<<endl;
	cout<<"the priemeter of TheRec is "<<theRec.perimeter()<<endl;
	cout<<"the area of theRec is "<<theRec.area()<<endl;


	theRec.setwidth(20.0);
	theRec.setlength(30.0);
	cout<<"theRec is "<<theRec.getlength()<<"feet long."<<endl;
	cout<<"theRec is "<<theRec.getwidth()<<"feet wide. "<<endl;
	cout<<"the priemeter of TheRec is "<<theRec.perimeter()<<endl;
	cout<<"the area of theRec is "<<theRec.area()<<endl;

	rectangle theRec9(11,6);
	cout<<"theRec9 is "<<theRec9.getlength()<<"feet long."<<endl;
	cout<<"theRec9 is "<<theRec9.getwidth()<<"feet wide. "<<endl;
	cout<<"the priemeter of TheRec9 is "<<theRec9.perimeter()<<endl;
	cout<<"the area of theRec9 is "<<theRec9.area()<<endl;
}

مع شكري وخالص تقديري :rolleyes:

تم تعديل هذه المشاركة بواسطة :: إسـتبرق C++ :: في 12 أغسطس 2005 في 20:47

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#9

السلام عليكم أخي استبرق

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

 : _name(name)

لذلك اذا اردت كتابة consrtructer يحتوي على هذه الجملة يجب ان تكتبه في تعريف الكلاس كما هو موضح في التصحيح

والخطأ الثاني انك عرفت char واستخدمتها كـ string

وبالنسبة للخطأ الأول فهو مكرر في الكود الأول و الكود الثاني

علما بأني لم أقرأ الكود الثاني ولكن لمحت الخطأ هذا وانا امر عليه

وهذا تصحيح الكود الأول

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

class patient{

private:
string _name;
int _heartRate;
double _moneyowed;

public:
patient();  //default constructor
patient(string name,int heartRate=0,double moneyowed=0.0)
 : _name(name)
{
  _heartRate=heartRate;
  _moneyowed=moneyowed;
};
~patient();
void setheartRate(int);
int getheartRate();
void setmoneyowed(double);
double getmoneyowed();
void setname(string name);
string getname();

};

patient::patient()
{
    _heartRate=0;
    _moneyowed=0.0;
}

patient::~patient()
{}

void patient::setheartRate(int heartRate)
{
 _heartRate=heartRate;
}

int patient::getheartRate()
{
 return _heartRate;
}

void patient::setmoneyowed(double moneyowed)
{
 _moneyowed=moneyowed;
}

double patient::getmoneyowed()
{
 return _moneyowed;
}

void patient::setname(string name)
{
 _name=name;
}

string patient::getname()
{
 return _name;
}


int main()
{

 patient pat("john",70,0.0);
 cout<<"patient "<<pat.getname()<<"owes"<<pat.getmoneyowed()<<endl;
 cout<<"his hesrt rate is "<<pat.getheartRate()<<endl;

 pat.setmoneyowed(1000.0);
 pat.setheartRate(140);
 cout<<"patient "<<pat.getname()<<"owes"<<pat.getmoneyowed()<<endl;
 cout<<"his hesrt rate is "<<pat.getheartRate()<<endl;

 return 0;
}

أخوك

The Cpp

تم تعديل هذه المشاركة بواسطة The Cpp في 13 أغسطس 2005 في 08:22

abofahad5515@hotmail.com

#10

تصحيح وحل للمشاكل ممتاز اخ THE CPP سبقتنى يا اخ فى الرد

رائع جدا

_____________________________

C Language && Windwos_API

_____________________________

#11

]جميل و رائع .. تشكر جزيلاً أخــي The Cpp

و انا ماادري كيف طنشت كتابة الإسترنج ولا حطيت بالي عليه ..

أما بالنسبه إلى الخطأ الأول ، أغلب البرامج التي رأيتها كانت مكتوبه خارج تعريف الكلاس ، وأنا لما جيت بنفذها ما تتنفذ

فكل الشكر الكبير على التوضيح ، و الحمدلله لقد أستفدت من خطئي .. :rolleyes: ، وتم تعديل البرنامج الآخر وصار شغال عندي ..

والشكر كذلك للأخ hamada hassan ali :)

تم تعديل هذه المشاركة بواسطة :: إسـتبرق C++ :: في 13 أغسطس 2005 في 14:06

بسم الله الرحمن الرحيم

" أولئك لهم جنات عدن تجري من تحتهم الأنهار

يحلون فيها من أساور من ذهب ويلبسون ثيابا خضرا

من سندس و إسـتـبـرق متكئين فيها على الأرائك

نعم الثواب وحسنت مرتفقاً "

صدق ذو الجلال والإكرام

#12

العفو اخوي hamada hassan ali وأخوي استبرق وانا في خدمتكم

أخوكم

The Cpp

abofahad5515@hotmail.com

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

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