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

لغز ممتاز ( إسناد كائن من فئة إلى متغير صحيح )

مغلق
بدأه ♥ حُوريّة ♥ في 15 فبراير 2008 · 26 رد · 3,688 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

===========

عندي لغز, صراحة مني عارفة مداه لحدة وين؟ لكن متأكدة بأنه يخفى على كثير مننا. اللي يحبوا الألغاز يتفضلوا

===========

اعتبروني مني خبيرة :P ..ومتقدمة لكم بالسؤال التالي:

===========

كيف انشيء صنف class واشتق منه كائن اسمه مثلاً "obj" بحيث يقبل التالي:

MyOwnClass obj = 4; //Any int value or any different data types such as float, double...
//or the following too:
obj = 22; //Normal assignment.
obj = (MyOwnClass) 32; //.^_^. C-Style typecast...
obj = MyOwnClass(10); // C++' Typecast...
obj = static_cast<MyOwnClass>(7); // ANSI-Style typecase...

قديمة قصة إعادة تعريف معامل التعيين Overloading for the Assignment Operator. يعني اتجنبوا التقنية هذي, رايدته صنف بسيييط و سادة بدون إعادة تعريف؟

=========

لو كانت موجودة هذي الإمكانية بلغتنا C++ شو اسمها؟ مع الشرح لو سمحتوا؟ إذا أمكن.

لا تشوفوا اللغز يا خبراء و تهربوا لأني عاملتها قبل كذا بألغاز الأخوة السابقة :lol:

=========

تمنياتي لكم

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 15 فبراير 2008 في 13:05

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#2

مرحبا رغد,

طيب شو هو السؤال :P

هل المطلوب هو هذا :

obj = static_cast<MyOwnClass>(7); // ANSI-Style typecase...

عموماً الحل على الخاص و لا العام :)

#3

السؤال اخي خالد بسيط, كيف يكون شكل الصنف تبعنا وتركيبته بحيث كل الشيفرة اللي انا كاتبتها تتوافق معاه. التحويل الضمني, التحويل الصريح, الـ الـ..بدون أعادة تعريف لمعامل التعيين "=" علشنا يتوافق مع نوع بيانات مثل int او غيره. و لكن بشرط أنا كاتبته باللون الأزرق بأصل المشاركة تبعتي.

:)

يعني بكل بساطة الشيفرة بالصندوق اللي بالأعلى ممكن تتم بدون إعادة تعريف "=". كيف يا ترى؟

شو اخي خالد؟ بكون مصعبتها اكتر؟ :o

يعني بإيجاز اكثر MyOwnClass كيف يكون, علشان يقبل كل السطور المكتوبة بصندوق الشيفرة بالأعلى؟

اقتباس
عموماً الحل على الخاص و لا العام

على العام, علشان الفايدة و النقاش يكون اشمل, لأني قاصدة ترسيخ مفهوم معين او االإستفادة العامة.

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 15 فبراير 2008 في 13:12

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#4

Again...

الشيفرة كاملة و ناقصها اشيا بالصنف, غير استعمال التقنية المتوقعة لحل المشكلة و هي Overloading Operators: بالله التوفيق

#include <iostream>
using namespace std;


class MyOwnClass
{
   //simi-empty class
public:
	//Your code goes here...as long as you need.
	//Don't make any operators overloading.

};

int main()
{
	MyOwnClass obj = 4; //Any int value or any different data types such as float,..
   //or the following too:
   obj = 22; //Normal assignment.
   obj = (MyOwnClass) 32; //.^_^. C-Style typecast...
   obj = MyOwnClass(10); // C++' Typecast...
   obj = static_cast<MyOwnClass>(7); // ANSI-Style typecase...
   return 0;

}

===

تمنياتي

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 15 فبراير 2008 في 14:01

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#5
اقتباس
لا تشوفوا اللغز يا خبراء و تهربوا لأني عاملتها قبل كذا بألغاز الأخوة السابقة

ما تقصدين يا رغد .. ؟؟ اذا كنتي انتي تفعليها فان شاءالله لن نفعلها نحن ..

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

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#6

السلام عليكم :

هل هذا الكود مناسب

#include<iostream>

using namespace std;

class MyOwnClass 

{

public:





template <class T>

MyOwnClass(T a)

{ 

cout<<a<<endl;

}

};

void main()

{

MyOwnClass obj=5; 

obj=22;

obj = (MyOwnClass) 32.3;

obj = MyOwnClass(10.3); 

obj = static_cast<MyOwnClass>(7.2); 

}
tvquran_6.gif

#7

السلام عليكم

======

فهد الشلوي ممتاز, جب طريقة سليمة و صحيحة. بدون لكن

=====

الطريقة الثانية؟ جية بالطريق وهي اللي انا قاصدتها باللغز وحابة نحكي ونتناقش عنها..

=====

شد حيلك اخي سنان شووو؟ :) هي صعبة صراحة مني لايمتك

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#8

مم بصراحة مش عارف :)! لغز جميل أخت رغد متوق لمعرفة الطريقة.

ملاحظة جانبية: كود جميل أخ فهد و أسلوب جديد, بالنسبة لى على اﻷقل.

#9

إن شاء الله اخي Blueteeth :pwease: , لكن شو رايك ننتظر المشرف خالد؟ لأنه ارسل رسالة باسم التقنية اللي انا قاصدتها باللغز وقال بأنه رح يتفاعل مع اللغز قريباً؟ هه؟ شو رايك ننتظره؟ :) على فكرة اخي التقنية هذي او الآلية هذي معترف بها علمياً وليست تلفيق وليست مجرد حل لمشكلة

It is not just solving a problem...

=======

فعلاً ممتاز الأخ فهد الشلوي...وعاملها مشاء الله عليه بطريقة حل مشكلة Solving Problem يعني Hacking وإجابته كاملة.

لكن إن شاء الله نشوف الإجابة كتقنية و كعمل ذكي من لغة C++ نفسها اثناء تصريف البرنامج Compiling Time.

وللمعلومية طريقته قريبة بالمرة من التقنية اللي انا قاصدتها.

=====

تمنياتي لكم

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 15 فبراير 2008 في 19:29

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#10

السلام عليكم:

أختي رغد الأسئلة التي تطريحنها انتي وخالد وسنان تحرك المعلومات وتبعثها من جديد.

فكرت في typeid لكن ما ضبطت معي. والموشر الخالي ايضا.

في انتظار الاجابة لمزيد من الفائدة.

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 15 فبراير 2008 في 19:41

tvquran_6.gif

#11

لا تروح بعيد اخي فهد..المسألة ليست معقدة لدرجة المؤشرات و غيرها..المسألة بسييييطة جداً اخوتي الكرام

====

انا مستعدة احط الحل الآن, و خالد اصلاً ما قال حطيه او لا تحطيه لكن اول واحد فاجئني باسم التقنية هذي وقال عندي لخبطة بخصوصها؟ لكن انا رايدة انتظره؟ يا ريت تسمحوا لي؟ لحدة بكرة وهو ان شاء الله بيرد :(

=====

تمنياتي لكم

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 15 فبراير 2008 في 21:59

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#12

الأخت الفاضلة ...

الحقيقة أنا مش عارف فى حاجه مطلوبه وانا مش واخد بالى منها، ولا ايه ؟؟؟

class MyOwnClass
{
   //simi-empty class
public:
	MyOwnClass(double d) {/* Your code */}

	//Your code goes here...as long as you need.
	//Don't make any operators overloading.
};

int main()
{
	MyOwnClass obj = 4; //Any int value or any different data types such as float,..
   //or the following too:
   obj = 22; //Normal assignment.
   obj = (MyOwnClass) 32; //.^_^. C-Style typecast...
   obj = MyOwnClass(10); // C++' Typecast...
   obj = static_cast<MyOwnClass>(7); // ANSI-Style typecase...
   return 0;
}

أنا فقط أضفت الـ Constructor عادى خالص: { } (MyOwnClass(double d، وأشتغل معاى كويس، أم المطلوب شيئ أخر؟

شكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 15 فبراير 2008 في 23:59

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#13
اقتباس
شد حيلك اخي سنان شووو؟ هي صعبة صراحة مني لايمتك

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

اقتباس
وبالنسبه للحل ..الان ليس لدي المجال ولكن ان شاءالله عندما اجلس افكر في ما تريديه ..

وهذا هو الحل باسبط الطرق ولا اعتقد انه يحتاج الى تقنية او اي شئ ولا يحتاج الى التلاعب باللغة .. اذا كنا لا نريد ان نتعامل مع اعادة التعريف (overloading) ..

اعتمدت الحل بمفهومين وهما Empty Constructor و Function overloading لل constructor .. وكالتالي..

class cl {
public :
		 cl( int x)  {  }
		cl(float x)  {  }
		cl ( char *x)  {  } 

};

void main() 
   {
	 char *c = "xxxxx";
		float f = 11.22;
		 int i = 100;
		   cl ob1;

		ob1 = i;
		ob1 = f;
	   ob1 = c; 

}

هذا ما فكرت به ووجدته قد حل اللغز .. واذا كانت هناك تقنية كما قلتي وضحيها او اتركي الاخ خالد ليشرحها لنا .. ولكن صراحة لا اجد ولم اسمع ان هناك شئ يعرف المؤثرات مرة اخرى سوى مبدأ اعادة التعريف operator overloading .. ولكن انا لست محترف بهذه اللغة لذلك يمكن انني لم اسمع بشئ من هذا القبيل لذلك فرصة لنكتسب معلومه (مع اني متاكد من عدم وجود شئ اخر) ..

انا بدأ لدي النصف الثاني للعام الدراسي لذلك يمكن في الفتره المقبلة اتاخر قليلا للدخول الى المنتدى يارغد والردود على الاسئله والالغاز .. لذلك لا تعتبري ان هذا هروبا او ماشابه ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#14

السلام عليكم اخي المشرف الفاضل واخي سنان

======

اقتباس
أنا فقط أضفت الـ Constructor عادى خالص: { } (MyOwnClass(double d، وأشتغل معاى كويس، أم المطلوب شيئ أخر؟

انا حاسبة حساب الأخوة اللي فقط اضافواا :blush: علشان كذا كاتبة تحت من اللغز شو اسمها التقنية هذي مع الشرح إذا امكن علشان اكون عارفة مين خمن ومين فاهم؟ انتوا صحيح تقريباً لكن الحل غير كامل ومو منطقي لأني طالبة شو اسم التقنية هذي مع الشرح. عملية التخمين هذي بسيطة اخوتي الكرام وتحتاجوا تعديل بسيط..

=====

اقتباس
رغد .. صراحة لا اجد اي صعوبه في اللغز

اشرح طيب شو صار معك؟؟ :happy:

=====

تمنياتي لكم

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#15

شو سنان؟؟؟؟

اقتباس
وهذا هو الحل باسبط الطرق ولا اعتقد انه يحتاج الى تقنية او اي شئ ولا يحتاج الى التلاعب باللغة .. اذا كنا لا نريد ان نتعامل مع اعادة التعريف (overloading) ..

اعتمدت الحل بمفهومين وهما Empty Constructor و Function overloading لل constructor .. وكالتالي..

ومن متى يا ترى كانت المشيدات الفارغةEmpty Constructors حلول نعتمد عليهن ببرمجة هذي اللغة؟ :)

========

اقتباس
انا بدأ لدي النصف الثاني للعام الدراسي لذلك يمكن في الفتره المقبلة اتاخر قليلا للدخول الى المنتدى يارغد والردود على الاسئله والالغاز .. لذلك لا تعتبري ان هذا هروبا او ماشابه ..

لا اخي ابداً,,شو مالك سنان اليوم افكارك متشنجة؟:S هروباً, تحدي, انا عارفة كلنا نتوتر لما ندخل على مستوى دراسي جديد :), الله يوفقك اخي سنان.

==========

تمنياتي

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 16 فبراير 2008 في 03:06

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#16

المشرف خالد قال بأنه دور وبحث بكل المراجع لكن ما لقي نفس سؤالي وجب سيرة التقنية Conversion لكن يقول مو نفس الطريقة اللي انتي كاتبتها..على العموم الحل كالتالي: علشان اروح انام لأني نعسانة بالمرة. -_-

===========

هذي التقنية اسمها Conversions وهي عبارة عن تلك المشيدات Constructors التي ليس لها إلا وسيط واحد فقط Only one argument من نوع بيانات معين.

أو حتى لو كان مصحوب بـوسيط افتراضي Default Argument مثل:

LEFT TO RIGHT

MyOwnClass(int x)

MyOwnClass(int x , int y = 1);

===========

الحل كالتالي: طبعاً حل المشرف وحل الأخ سنان تخمينية صراحة :rolleyes: . رايحة اقول لكم كيف صارت الأشياء هذي

#include <iostream>
using std::cout;
using std::endl;

class MyOwnClass
{
public:
	MyOwnClass(int x) {m_x = x;}//The conversion
private:
 int m_x;

};

int main()
{
   //Normal instantiatian...
   MyOwnClass obj1(3); //Ok call the normal constructor
   MyOwnClass obj2 = 4; //Call the constructor as conversion.

   obj2 = 22; //impicit calling for the conversion...
   obj2 = (MyOwnClass) 32; //.^_^. C-Style typecast...
   obj2 = MyOwnClass(10); // C++' Typecast...
   obj2 = static_cast<MyOwnClass>(7); // ANSI-Style typecase...
   return 0;
}

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

1. هنّي نداء المشيد بشكل طبيعي

LEFT TO RIGHT

MyOwnClass(int ...)

2. هي نداء معامل "=" الضمني

LEFT TO RIGHT

MyOwnClass::operator =()

و بالطبع يتم إنشاء كائن Object وقتي أثناء عملية التعيين...

=====

ممممم يعني تقريباً ممكن تقرأوا التالي: على فكرة يا خالد انت لو نزلت بعينك تحت رح تلاقي من الرابط التالي رابط يتكلم عن الموضوع بالتفصيل, انا عارفة بأنك كنت فاكرها ورحت عملت بحث لكن لخبط عليك الحال :wacko:

LEFT TO RIGHT

إن شاء تكون اجابتي نموذجية اخي Blueteeth. اتفضل واقرأ ايضاً من الرابط أعلاه وشاكرة لك تواضعك اخي :happy:

=====

تمنياتي لكم بالتوفيق.

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#17

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

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

لكن الى كتبتيه ياخذ طبيعي فقط.

المهم : نشوفك في الغاز سنان ان شاء الله.

انا متاكد سنان راح يجهز لغز يتعب.

بالتوفيق ..

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 16 فبراير 2008 في 04:31

tvquran_6.gif

#18
اقتباس
انا حاسبة حساب الأخوة اللي فقط اضافواا علشان كذا كاتبة تحت من اللغز شو اسمها التقنية هذي مع الشرح إذا امكن علشان اكون عارفة مين خمن ومين فاهم؟ انتوا صحيح تقريباً لكن الحل غير كامل ومو منطقي لأني طالبة شو اسم التقنية هذي مع الشرح. عملية التخمين هذي بسيطة اخوتي الكرام وتحتاجوا تعديل بسيط..

=======

لا اخي فهد حتى من اي نوع ثاني ممكن.

======

اقتباس
المهم : نشوفك في الغاز سنان ان شاء الله.

انا متاكد سنان راح يجهز لغز يتعب.

ما بتفاعل ما اسئلة سهلة احتراماً لخبرتي B)

جالسة امزح معاكوا لا تاخذوها بحساسية...:unsure:

تم تعديل هذه المشاركة بواسطة رغـــــــــد في 16 فبراير 2008 في 14:52

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#19
اقتباس
الحل كالتالي: طبعاً حل المشرف وحل الأخ سنان تخمينية صراحة . رايحة اقول لكم كيف صارت الأشياء هذي

رغد كلامك صحيح كله .. انا حليت اللغز بهذه الطريقة .. واعرف ايضا بـ The conversion ولكن لم افهم انك تقصدين هذا المبدأ بالتقنية ..

وقد وضحت هذا سابقا واعيد هذه الفقرة لكي اؤكد كلامي ..

اقتباس
اسمع ان هناك شئ يعرف المؤثرات مرة اخرى سوى مبدأ اعادة التعريف operator overloading .. ولكن انا لست محترف بهذه اللغة لذلك يمكن انني لم اسمع بشئ من هذا القبيل لذلك فرصة لنكتسب معلومه (مع اني متاكد من عدم وجود شئ اخر) ..

فالذي فهمته من سؤالك شئ يشبه ال overloading في عمله وفائدته وهي اعادة تعريف المؤثرات .. ولكن ليس هو .. لذلك قلت جملتي السابقه .. فحليت اللغز كمشيد فارغ .. وتم الحل ..

اقتباس
ما بتفاعل ما اسئلة سهلة احتراماً لخبرتي

طيب يارغد اللغز القادم ان شاءالله بعد كم اريد اول حل مرسل لي يكون منك انتي .. لنرى خبرتك ... (اتفقنا ؟؟؟)

تحياتي العطرة ..

تم تعديل هذه المشاركة بواسطة سنان محمد صالح في 16 فبراير 2008 في 14:55

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#20

صحيح اخي سنان, إذاَ انت مثل خالد, لأنه حتى هو عرفها بـ Conversions Operators ولكن ما مريتوا على درس Coversions by Constructors. والحمد لله معطيتكم لغز كان نافع للفت انتباهكم لهذي المعلومة

======

تمنياتي لكم

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#21

والحمد لله معطيتكم لغز كان نافع للفت انتباهكم لهذي المعلومة

صراحة نعم تشكرين يا رغد لانك ربطتي بين المعلومات ..

ولكن هذا لن يفلتك مما ينتظرك مستقبلا.. (منيييييييييييييي) ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#22

بصراحة رائع أخت رغد, جانب مكنتش واخد بالى منه خالص فى السى++.

بس مش ال Conversion by constructors دى هى ال Constructor overloading وﻻ فى حاجة أنا مش واخد بالى منها؟

#23
اقتباس
بصراحة رائع أخت رغد, جانب مكنتش واخد بالى منه خالص فى السى++.

بس مش ال Conversion by constructors دى هى ال Constructor overloading وﻻ فى حاجة أنا مش واخد بالى منها؟

============

انت تخمينك اخي ممتاز, طبعاً بالضبط مثلها مثل إعادة تعريف المشيّدات Constructor Overloading, شو الفرق يعني؟؟ لكن هناك فرق بسييط جداً يتجسد لما بنخصصهن بوسيط واحد فقط Only one argument. خلاص الآن نحنا الآن مخولين لنعت هذا المشيّد بـ Conversion. وبياخذ التقنية الضمنية تبعته الخاصة اللي انا ملمحة لها بالرد الأصلي, او موجودة بالرابط اللي انا كاتبته لك اخي الكريم.

======

ان شاء الله وضحت الفكرة اخي الكريم؟

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#24
رغـــــــــد كتب:

============

انت تخمينك اخي ممتاز, طبعاً بالضبط مثلها مثل إعادة تعريف المشيّدات Constructor Overloading, شو الفرق يعني؟؟ لكن هناك فرق بسييط جداً يتجسد لما بنخصصهن بوسيط واحد فقط Only one argument. خلاص الآن نحنا الآن مخولين لنعت هذا المشيّد بـ Conversion. وبياخذ التقنية الضمنية تبعته الخاصة اللي انا ملمحة لها بالرد الأصلي, او موجودة بالرابط اللي انا كاتبته لك اخي الكريم.

======

ان شاء الله وضحت الفكرة اخي الكريم؟

جدا أخت رغد بارك الله فيكى.

#25

Asalam Alikum

I think you mean "Class Serilization"

#include <iostream>

class MyOwnClass: public Serializable{
public:
virtual void setValue(const string& s, Value val) = 0;

private:
MyOwnClass *Val;

};

int main()
{
   //Normal instantiatian...
   MyOwnClass obj1(3); //Ok call the normal constructor
   MyOwnClass obj2 = 4; //Call the constructor as conversion.

   obj2 = 22; //impicit calling for the conversion...
   obj2 = (MyOwnClass) 32; //.^_^. C-Style typecast...
   obj2 = MyOwnClass(10); // C++' Typecast...
   obj2 = static_cast<MyOwnClass>(7); // ANSI-Style typecase...
   return 0;
}

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

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