السلام عليكم
ما هي مُخرجات الكود التالي مع التبرير ؟ وكيف يتم تصحيحها ؟
تحياتي.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
نظريا مخرجات الأمر هي 600
التبرير
أنشأنا كائنا t1 ثم أشئنا مؤشرا t2 يشير إلى نفس ما يشير إليه المؤشر t1 فكل تغيير يحدث للكائن t1 سيحدث للكائن t2 لأنهما يشيران إلى نفس الموقع من الذاكرة
لتصحيح الخطأ ننشأ الكائن t2 هكذا
Test t2 = new Test();
إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة
فما أحوجني إلى دعوة صالحة من أخ لي كريم
أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز
يسعد مساكك استاذي العزيز
الاوت بوت :
600
السبب :
الاوبجكت الاول انشى بقيمة افتراضية موجوده في Constructors وهي 5000
بعد ذلك انشأت اوبجكت ثاني يحمل نفس العنوان والقيمة لـ الاوبجكت الاول ,, ( اصبحوا الاثنين يحملون نفس العنوان Reference )
بعد ذلك غيرنا قيمة size في الاوبجكت الاول الى 400 بواسطة دالة الـ setter
بعد ذلك غيرنا قيمة size في الاوبجكت الثاني الى 600 بواسطة دالة الـ setter
وبما اننهم يحملون نفس العنوان Reference اذا سوف تتغير قيمة الـ size القديمة لتصبح 600
بعد ذلك طبعنا size للاوبجكت الاول وقيمتهه 600 ,,
( وحتى لو طبعنا قيمة الـ size في الاوبجكت الثاني راح تكون 600 )
بالنسبة لسوالك الثاني : وكيف يتم تصحيحها ؟؟
اذا كان قصدك ان كل اوبجكت يصير له قيمة مستقل ؟؟
الحل بكل بساطة لما انشأنا الاوبجكت الثاني ننشيئة بـ Constructors الافتراضي وبعنوان Reference مستقل
( غير الجزء اللي بعد علامة = )
اتمنى ان اكون وفقت في الاجابة الصحيحه
اتفق معهم فى التبرير
والحل هو فى Copy Constructor
انظر الكود التالى
public class Test{
private int size;
public Test()
{
size = 5000;
}
public Test(Test aTest)
{
this();
size = aTest.getSize();
}
public void setSize(int height)
{
size = height;
}
public int getSize()
{
return size;
}
public static void main(String []args){
Test t1 = new Test();
Test t2 = new Test(t1);
t1.setSize(400);
t2.setSize(600);
System.out.println("t1.size = " + t1.getSize() + " ,t2.size = " + t2.getSize());
}
}
المخرجات
t1.size = 400 ,t2.size = 600
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
السلام عليكم
المشاركات كانت قيمة و لله الحمد.
يوجد حل آخر و هو استخدام الدالة clone التابعة لــ Object و عمل Implementation للواجهة Cloneable.
تحياتي.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :