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

قصتي ومآساتي مع كتب ++VC !

مغلق
بدأه آل عيد في 6 أغسطس 2001 · 5 رد · 544 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

في الحقيقة الظاهر إني راح أنشر سلسة قصص راح اسميها "قصتي ومآساتي مع كتب ++VC" بعد المصائب والمآسي التي سببتها لي هذه الكتب ، يعني ما في ولا كتاب أقدر أخلصه بدون ما يرتفع ضغطي ( اللي يسمعني اقول شكله قاري الف كتاب ما صار هذا الكتاب الثاني) .

عموما أشوى إنكم موجودين عشان أحط حرقتي فيكم .

مرة واحدة مؤلف الكتاب قام احط شفرة مثل هذه وبدون ما اتعب روحه يشرحها :

#include 

class test
{
public:
	test();
	int GetA() {return A;}
private:
	int A;
};

test::test() :
A(2) {}

void main()
{
	test D;
	cout << D.GetA () << endl;
}

بالنسبة للباني وضع بعده : وبعدين حط أسماء المتغيرات كأنها وظائف ويمرر لها قيم فتنتقل القيم للمتغيرات ، ممكن أحد يشرح لي التركيب هذا ، وشكرا لكم و عذرا على الإزعاج .

أخوكم ،

#2

السلام عليكم.

الأخ آل عيد بدك تطول بالك شوي :):):)

أظن أن السطر المبهم هو :

test::test():A(2)
{
{

و هذه طريقة متطورة لتهيئة المتحول A و الذي هو Member Varaible من test , فعند التصريح في main عن المتحول D من نوع test يتم تنفيذ الباني Constructor ل test الذي بدوره يقوم بتهيئة المتحول A بالقيمة 2 و بالتالي البرنامج سيطبع 2 و هي قيمة المتحول A.

مع التحيات.

#3

أخي العزيز يمكنك كتابة السطر بشكل المعتاد ويقوم بنفس العمل

test::test()
{
 a=2;
}

مع أن الطريقة المكتوبة أجمل وتقم بنقل القيم البدائية قبل الدخول إلى قبل المعادلة وهو شكل جمالي فقط لضمان إعطاء القيم البدئية قبل القيام بإي عملية أخرى

وهذةالطريقة ليست حديثة وإنما تقم بعمل إعطاء القيم البدائية حتى للأنواع المعرفة من المستخدم غير الأنواع الأساسية

مثل

//////////////////////////////////////
#include
class base
{  
	char m_b;
  public:
   base(char B){m_b=b;}
   char Getb(){return m_b;}
};

class test: ' public base
{ 
	char m_a;
public:
  test()';
  char Geta(){return m_a;}
};

test::test():base('b'),m_a('a')
{
}
void main()
{
  test t;
  cout<  cout<}
//////////////////////////////////

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

تكتشفها إذا قراءة القواعد التي يعمل عليها مترجم لغة السي

مثلا يمكن كتابة الجملة

for( ; ; )
{
}

وتعمل عمل while(1)

وأيضا يمكن كتابة الجملة

if(1)
cout<<"a",
cout<<"b",
cout<<"c";

سيتم تطبيق جميع الجمل بعد الدخول في الضرف

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

#4

أشكركم على هذه الردود ..

بصراحة إن استخدام هذا النوع من الاسناد إلى المتجولات في ال Constructor مفيد أكثر من أن يكون ناحية جمالية .. وهو إلو قصة :: تعالو نحكيلكم اياها .. :)

يوجد متحول من نوع CMyPoint موجود في الكلاس test تبعك .. بحيث أن ال CMyPoint لا تحتوي على Default Constructor . الباني الافتراضي هو باني لا يحتاج إلى بارامترات . أي يجب اعطاء بارامترات من أجل تهيئة هذا المتحول بقيم معينه . فكيف برأيك سوف تقوم بتهيئة هذا المتحول ..

لا يوجد سوى طريقة واحدة وهي تهيئته في نفس وقت تهيئة الكلاس الأساسي test . وذلك بوضعه بجوار باني ال test كالتالي مثلا :

test::test() : point(1, 2)
{
}

وهذا هو السبب الأساسي في وجود مثل هذه الصيعة وهي تهيئة أو اعطاء قيم للمتحولات التي هي من نوع classes .. فهذا أسرع بكثير من اسناد قيم لها في الباني ..

ويجب الانتباه إلى ترتيب عمليات التهيئة .. فمثلا إذا قمت بتعريف ثلاث متحولات في الكلاس test كالتالي :

    CMyPoint pt1;
    CMyPoint pt2;
    CString str;

ومثلا في الباني قمت بكتابة :

test::test() : 
   pt2(1, 2), str("Hello"), pt1(4, 1)
{
}

لاحظ ترتيب وجودهم في سلسلة التعريف في الباني .. لكن هل تتوقع أن يتم تعريفهم حسب ترتسبهم في سلسلة التعريف في الباني أم حسب ترتيبهم في الكلاس ..؟

أي هل سوف يتم بنائهم كالتالي :

pt2

str

pt1

أم :

pt1

pt2

str

بصراحة سوف يتم بنائهم على حسب ترتيبهم في الكلاس .. ويمكن تجربة ذلك .. :)

Coding on the Cloud and for the Cloud!

My Blog

#5

السلام عليكم.

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

لماذا يوجد فرق في ترتيب البواني ؟ أي أنه طالما أن المتحولات في نفس المستوى فما الفائدة من وضع باني قبل الآخر مع العلم أنه يمكن تغيير ترتيب المتحولات أثناء التصريح ؟

مع التحيات.

#6

أشكر الأخ هاني على تصحيح الخطاء

ولكن بالنسبة لسؤال الأخ والذي يحتوي على أعطاء قيمة إبتدائية لأحد الانواع الأساسية في لغة السي فأنه ليس من الازم كتابتها بهاذا الشكل وهذا كان قصدي بالجماليات لأن الكتابة بهذا الشكل هي الأجمل لضمان أن تعطى القيم الأبتادائيه للأنواع الأساسية قبل الأنواع المعرفة من المستخدم لضمان عدم إستخدام هذة المتغيرات قبل أن تأخذ قيم بدائية

ويمكنك إعادة تعريف عملية = لنوع المعرف من المستخدم وإستخدامه بالشكل الطبيعي

UserClass=12;

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

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