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

ما الخطأ في هذا الكود (كود من أحد دروس اﻷعضاء)

بدأه Adban في 30 ديسمبر 2010 · 8 رد · 652 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم، كنت أقرأ درس اﻷستاذ الثبيتي عن البرمجة OOP في هذا الموضوع:

/index.php?showtopic=78192

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

class Fraction
{
public:
Fraction ( int = 1 );
};

وقد وُصف بالتالي:

اقتباس
ما هـو هذا الخطأ ، مع العلـم أنه خطأ تصميمي وليس في قواعـد اللغـة,,,,,,,,,,,,,,,


  • فما هو الخطأ بالضبط،.

تم تعديل هذه المشاركة بواسطة Adban في 30 ديسمبر 2010 في 17:47

2
#2

لا يمكن اعطاء قيمه لل datatype يمكنك فقط ان تعرف متغير واعطائه قيمه مثلاً

int x = 1 وهذا صحيح

#3

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

خلص ربما هناك من سيعتني بالموضوع

شكراً

موفقين يارب

تم تعديل هذه المشاركة بواسطة ♥ حُوريّة ♥ في 30 ديسمبر 2010 في 18:18

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#4

شكرا لك أخي

ولكن هذا الخطأ

اقتباس
أنه خطأ تصميمي وليس في قواعـد اللغـة
#5

الكود التالي يعمل بكل لباقة! ودون أخطاء

#include<iostream>

class Fraction
{
public:
Fraction ( int =1 );
};

int main(){
    std::cout<<"All thing Ok!"<<std::endl;
    return 0;
}
#6

مثل ما قال الاستاذ علي ..

و غير كذا الكلاس ما فيه متغير بس الـ constructor !!!

اقتباس
أنه خطأ تصميمي وليس في قواعـد اللغـة

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

ثانيا الكود الثاني شغال لانك تشتغل في المين و ما استخدمت الكلاس ..

تم تعديل هذه المشاركة بواسطة Nouf Bint Turki في 30 ديسمبر 2010 في 19:55

#7

عفواً ان اعتقد ان الاقواس بهذا الشكل {} وليسه ()

هنا نعم لن تحصل على اي اعتراض من الكومبايلر حتى ولو استخدمت الكلاس ، هنا انت قلت ان الكونستركتر يأخذ نوع int ولكن انت لن تستخدمه ابداً او بالاصح لن تستطيع استخدامه لانك لا تملك عنوان المتغير في ال فنكشن .

المقصود هنا خطاء منطقي وليس برمجي .

2
#8
Ali Al-Zyoud كتب:

عفواً ان اعتقد ان الاقواس بهذا الشكل {} وليسه ()

هنا نعم لن تحصل على اي اعتراض من الكومبايلر حتى ولو استخدمت الكلاس ، هنا انت قلت ان الكونستركتر يأخذ نوع int ولكن انت لن تستخدمه ابداً او بالاصح لن تستطيع استخدامه لانك لا تملك عنوان المتغير في ال فنكشن .

المقصود هنا خطاء منطقي وليس برمجي .

أضنها اﻹجابة اﻷدق، شكر الله لك.

وشكرا لكل اﻷخوة الذين أفادوا.

#9

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

لا أعتقد أن هناك خطأ في التصميم بقدر ما هو رأي أو فكر معين يحبذ شيء على شيء. القضية برأيي أن الأخ سلطان كان يقصد بأن تحديد الـ Optional Parameter في الـ Constructor عبارة Implementation Leakage, أي أننا خالفنا مبدأ الـ Encapsulation بهذه الطريقة. المفروض, أن لا يتم وضع قيمة الـ Optional Parameter في الـ Declaration و إنما يكون في الـ Definition فقط, و هذا سيسمح لنا بتغييره لاحقاً لأن واجهة الكائن الرسمية هي الـ Declaration. كما قلت سابقاً, البعض قد يرى أنها طريقة أفضل لتوثيق تصرف الكائن, و البعض الآخر قد يرى أنها مخالفة لمبدأ الـ Encapsulation.

اقتباس
عفواً ان اعتقد ان الاقواس بهذا الشكل {} وليسه ()

ليس هناك مشكلة في الكود. لو قمت باستخدام الفئة, ستحصل على Link error. لأنه بالفعل هناك constructor معلن للفئة, و لكنه غير معرف في أي مكان يستطيع الـ Linker الوصول إليه(هو غير معرف أساساً!).

تحياتي...

2

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…