يا شباب يا مبرمجين
لو سمحتوا شو الفرق بين السي والسي طرح طرح ;) عفوا بلس بلس
يا شباب يا مبرمجين
لو سمحتوا شو الفرق بين السي والسي طرح طرح ;) عفوا بلس بلس
السي هي لغة برمجة
عندمت تم تطويرها لتدعم البرمجة الموجهة بالكائنات oop ... أصبحت سي++
بتقدر تقول نفس اللغة إلا أن سي لا تدعم ما يسمّى بالفئات Classes والكائنات objects في حين تدعمها السي++...
سي++ تحوي كل أوامر سي ومضاف اليها أشياء جديدة..
هذا جواب عام
السلام عليكم
معذرة اخى OOP ولكن السى تختلف تماماً عن السى بلس بلس, ولغة السى بلس بلس لا تحتوى السى, كل لغة منفصلة بذاتها ولا علاقة لها باللغة الاخرى.
لاحظ انه بنفس المنطق استطيع ان ادعي ان لغة السى هى تطوير للغة الاسمبلى لانك بمترجم لغة السى تستطيع ان تقوم تقريباً بكل ما تقوم به بلغة الاسمبلي, السؤال هو هل لغة السى هى لغة اسمبلي معى بعض الاضافات؟ بالتاكيد لا.
كذلك لغة السى بلس بلس لا تعتبر هى لغة السى معى بعض الاضافات..
لغة السى بلس بلس لها فلسفة مختلفة تماماً عن لغة السى فى تعتمد بشل كامل على الclasses والTemplets والoverload والinharitens الخ ..
بينما لغة السى فهى لغة تسمى procedural language وتعتمد على إنشاء الدوال ..
وكما انك تستطيع دمج لغة الاسمبلى معى لغة السى او السى بلس بلس, ايضاً تستطيع دمج لغة السى بلس بلس معى لغة السى, مثل بسيط:
فى لغة السى نستخدم الدالة printf للطباعة, نفس الدالة تستطيع ان تستخدمها معى لغة السى بلس بلس, ولكنك بذلك تكسر قاعدة من قواعد اللغة لان الدالة printf لا تستطيع عمل overload لها,ولذلك يجب عليك ان تستخدم الدالة cout لانها جزء من لغة السى بلس بلس.
ايضاً لغة السى بلس بلس تستخدم فى المشاريع الضخمة لانها لغة ذات مستوى اعلى من لغة السى ويمكن عمل هيكلة لمشروع بشكل افضل ينقلك من التعامل معى الهاردوير إلى مرحلة تتعامل فيها معى اشياء نظرية سهلة الشرح..
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
اقتباس,ولذلك يجب عليك ان تستخدم الدالة cout لانها جزء من لغة السى بلس
شيء غريب .. أنا كنت متوقع ان مكتبة iostream هي خاصة بالفيجوال سي .. او بأسوأ الاحوال .. لبيئة الويندوز .. وليست للسي بلس فقط ..
صحيح أن cout واخواتها لا تعمل الا على السي بلس .. لكن من الذي أنشأها .. أليست مايكروسوفت .
أغلب المتجرمات اللي عندي ( عدا الفيجوال) تعتمد printf .. فقط .
هل من توضيح .
تم تعديل هذه المشاركة بواسطة الشمري في 14 فبراير 2006 في 00:02
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
مكتبة القوالب القياسية STL ومن ضمنها iostream هي مكتبات قياسية من صميم السي بلس بلس وليس لمايكروسوفت أو بورلاند أو صـن سلطـة عليها .....
من الممكن أن تكون المترجمات التي لديك هي مترجمات للسي فقط وليس للسي بلس بلس .... هذا إذا افترضنا أن هـناك مترجمات للسي مستقلة عـن السي بلس بلس
أريد أن أضيف شيء صغير
لغة سي بلس بلس هي حفيد للغة السي و ليست لغة مختلفة عنها و هذا كلام Bjarne Stroustrup نفسه
كما أن جميع الأمثلة في كتاب The C Programming Language تصلح لتكون كود سي بلس بلس أيضا
كما أن السي بلس بلس ليست Object Oriented فقط بل في Multi-Paradigm Programming Language فيمكن إستخدامها ك Structured Programming Language أو Object Oriented Language
أخر شيء هو أن سي بلس بلس يمكن إستخدامها ك سي أفضل (C++ can be used as a better C) و لكن هذا سيكون هدر للإمكانيات التي تقدمها سي بلس بلس
السلام عليكم
اخى اسامة إذا كان جميع الامثلة فى كتاب Then C Programming Language تصلح ان تكون امثلة سي بلس بلس إذاَ ماهو الفرق بين اللغتين؟
بالتاكيد تستطيع ان تكتب برنامج سى وتترجمة بإستخدام مترجم السى بلس بلس ولكن هذا لا يعنى انك كتبت برنامج سى بلس بلس.
تستطيع ايضاً باستخدام asm_ ان تكتب برنامج يحتوى على شفرة اسمبلى فقد وتترجمة بإستخدم مترجم السى بلس بلس, هل يعنى هذا انك كتبت برنامج سى بلس بلس؟ بالتاكيد لا.
لغة السى بلس بلس لها فلسفة مختلفة تماماً عن لغة السى, الفرق بين السي بلس بلس هو كالفرق بين الدلفي او الاوبجك باسكال والباسكال القديمة, ولا يجوز ان نشبه الواحده بالاخرى .
لاحظ ان Bjarne لم يقل ان السي بلس بلس هى لغة السى ولكنها مشتقة من السى كذلك الدلفي مشتقة من الباسكال, ولكن إضافة الـoop غيرة فلسفتها تماماً وجعلتها لغة مستقلة .
ايضاً لاحظ ان مبرمج السى لا يستطيع القيام بعمل برامج سى بلس بلس, ورغم ان مبرمج السى بلس بلس يستطيع كتابة بعض البرامج بلغة السى إلا انه لا يعتبر محترف برمجة سى لان اللغة مختلفة وإمكانياتها ايضاً مختلفة..
اخيراً c++ can be used as a better C but it's not C إقراء كتاب Bjarne وستعرف ان هناك فرق كبير بين اللغتين رغم وجود تشابه كبير فى الـsyntax ..
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
أخ أحمد ...
أنا شخصيا لا يمكنني أن أتصور أن سي++ لغة غير لغة سي....
أولا التعابير نفسها
ثانيا كل الكلمات المحفوظة لسي موجودة في سي++
لغة سي++ هي تطوير للسي من أجل جعلها تدعم مبدأ البرمجة الموجهة بالكائنات.
وقرأت ملاحظة صغيرة في أحد الكتب لها دلالة هنا :
" لغة سي++ لم تدعم مبدأ البرمجة الموجهة بالكائنات 100% وذلك لكي تحافظ على جذورها المغروسة عميقاً في لغة الأم سي "
وشكراً.
بالتاكيد اخى إسماعيل لغة السى بلس بلس تختلف تماماً عن لغة السى الشئ الوحيد الذى يجمعهم هو ان مترجمات لغة السى بلس بلس تدعم لغة السى, بالاضافة إلا ان الـsyntax متشابه.
دعنى اعطيك بعض الامثلة:
فى لغة السى بلس بلس هناك الدوال cin و cout ولكنها غير موجوده فى لغة السى, البديل هو printf بدل من cout وscanf بدل من cin, لاحظ الان ان لغة السى بلس بلس تستطيع ان تستغنى عن printf و scanf بل لن تستطيع إستخدامها إذا كنت تريد ان تبرمج برنامج غرضي التوجه, وذلك لان هذه الدوال لا يمكن عمل overload لها, بينما cin و cout صنعت خصيصاُ للتوافع معى البرمجة غريضية التوجه وذلك بعمل overload للدوال >> و <<..
لحجز الذاكرة نستخدم فى لغة السى malloc و free اما فى لغة السى بلس بلس فنستخدم new و delete, ما هو الفرق؟ هل تستطيع بmalloc ان تحجز ذاكرة لobject دون ان تعرف حجمها؟ طبعاً امكانية إستخدم malloc و free موجودة ولكن اغلب المبرمجين يستخدمون new و delete للتحكم فى الـobjects ..
علمية استدعاء الدوال تختلف فى لغة السى عن لغة السى بلس بلس, فمثلاُ إذا اردت ان تستدعي دالة مبرمجة بالسى بلس بلس وكنت تستخدم مترجم سى قديم يجب عليك ان تضيف عدد البايت التى تتطلبها الدالة, لا تحتاج لعمل ذلك عند إستخدام مترجم سى بلس بلس لان المترجم يقوم بذلك بالنيابة عنك, على سبيل المثال إذا كانت هناك دالة تدعى foo وتاخذ 3 integer, إذا كانت هذه الدالة كتبت بلغة السى بلس بلس تستدعى هكذا foo@12 اما إذا كانت مكتوبة بلغة السى فتستدعى foo بدون اي إضافات.
التحكم فى الاخطاء غير موجود فى لغة السى وإذا اردت القيام به يجب عليك ان تستخدم المؤشر FS يعنى لابد ان تكتب هذا الجزء من البرنامج بلغة الاسمبلى, اما فى السى بلس بلس فهو موجود عن طريق إستخدام try block.
هذا فقط بعض الاختلافات التى لا علاقة لها بكون السى بلس بلس oop وإنما هى إختلافات فى اللغة نفسها, تستطيع ان تكتب برنامج كامل بلغة السى بلس بلس لا يستدعي اى دالة من دوال لغة السى كما انك تستطيع ان تقوم بعمل كمبايلر لا يدعم لغة السى, ولكن الجميع تعود على ان مترجمات لغة السى بلس بلس تترجم ايضاً برامج السى لذلك يعتقد الجميع انها نفس اللغة معى بعض التطويرات وإضافة إمكانية البرمجة غرضية التوجه..
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
اقتباسعلمية استدعاء الدوال تختلف فى لغة السى عن لغة السى بلس بلس, فمثلاُ إذا اردت ان تستدعي دالة مبرمجة بالسى بلس بلس وكنت تستخدم مترجم سى قديم يجب عليك ان تضيف عدد البايت التى تتطلبها الدالة, لا تحتاج لعمل ذلك عند إستخدام مترجم سى بلس بلس لان المترجم يقوم بذلك بالنيابة عنك, على سبيل المثال إذا كانت هناك دالة تدعى foo وتاخذ 3 integer, إذا كانت هذه الدالة كتبت بلغة السى بلس بلس تستدعى هكذا foo@12 اما إذا كانت مكتوبة بلغة السى فتستدعى foo بدون اي إضافات.
يا أخ أحمد ما علاقة هذا بالسي أو بالسي بلس بلس فهذا مجرد شيء يختلف من Compiler لأخر و لا علاقة له بالسي لأن سي بلس بلس ظهرت بعد فترة من ظهور ANSI C
اقتباسلحجز الذاكرة نستخدم فى لغة السى malloc و free اما فى لغة السى بلس بلس فنستخدم new و delete, ما هو الفرق؟ هل تستطيع بmalloc ان تحجز ذاكرة لobject دون ان تعرف حجمها؟ طبعاً امكانية إستخدم malloc و free موجودة ولكن اغلب المبرمجين يستخدمون new و delete للتحكم فى الـobjects ..
هذا ما قاله Bjarne Stroustrup
From C, C++inherited a functional interface to dynamic memory. It can be found in <cstdlib> void* malloc(size_t s); void* calloc(size_t n, size_t s); void* free(void* p); void* realloc(void *p, size_t s);
أي أن هذه الدوال موروثة من السي و أصبحت جزء لا يتجزأ من السي بلس بلس
لذا لازلت أعتقد أن سي بلس بلس تحتوي السي :)
الحديث طال هـنا حول الفرق بين اللغتين .....
أنا أقول أن هـناك فرقاً كبيراً بين اللغتين وليس فرقاً صغيراً كما كنت أعتقد .....
- لا أحب أن أختصر الفرق بين اللغتين في مجرد الكلمات المحجوزة ... لو كان هذا الأساس لكانت الجافا والسي بلس بلس والسي والسي شارب .. وتقريباً بقية اللغات لغـة واحدة.
- في البدء أسلوب الكتابة عـند بداية أي بلوك ... فمثلاً في لغـة السي .... لا بد أن تقوم بالتصريح عـن المتغيرات التي تريد استخدامها في بداية البلوك (الكتلة) ؛ لكن في السي بلس بلس بإمكانك استخدام التصريح عـنها في أي مكان من البلوك ...
ملاحظة: النسخ الجديدة من لغة السي تسمح لك بأن تقوم بالتصريح في أي مكان.
- إحدى الأشياء التي تحققها لغـة السي بلس بلس ولا تحققها لغـة السي .. هـو إعطاء الحماية للأنواع ... أنظر مثلاً إلى هذا السطر .. الذي لن يشتكي منه المترجم ..
int a=4;
printf("%f" , a);لن يشتكي مترجم السي من هذا السطر ... لأن السي أصلاً لا تعطي الحماية للأنواع ... بالنسبة للسي بلس بلس فهي تعطي الحماية للأنواع وستكون انتهكت أحد مبادئها إن تركت مبدأ الحماية للأنواع..
- أيضاً لغـة السي لا وجود فيها لعلامـة المرجع & ... صحيح توجد علامـة العـنوان & .. ولكن لا تستطيع مثلاً كتابة هذا السطر في لغـة السي:
int &a =4;
- إذا كنت أعتقد كما تعتقدون أنتم أن لغـة السي بلس بلس لا فرق بينها وبين السي ، فلماذا أكتب أصلاً كودا بلغـة السي بلس بلس ... أليس برنامج السي أسرع .
- السي بلس بلس تدعـم البرمجـة الشيئيـة .... وحتى إذا لم تستخدم أي كائن في كودك .. ستلاحظ أن بعض آثار البرمجـة الشيئيـة موجودة في هذه اللغـة .... كمثال على ذلك .. التحميل الزائد للدوال .... الذي يعـني أن الدالة ستكون مجردة ... أعـني أنك لن تقوم لمستخدم الدالة: الدالة التي كتبتها لا تستقبل سوى بارامتر واحد ... بل ستقول: حتى تفعل هذه الوظيفة فبإمكانك استخدام دالتي ..... ولن يهتم المستخدم بالتفاصيل ...... هذه فلسفة موجودة في السي بلس بلس ولكنها ليست موجودة في السي .......
- السي بلس بلس لغـة مهجنـة .. تدعـم الهيكلية والشيئيـة أما عـن السبب وراء ذلك .. فهـو دعـم أكواد السي ....
- أنا لدي سؤال هـنا: سمعت معلومـة غريبـة أن السي بلس بلس مثل الفيجوال بيسك6 (من ناحية دعـم الـ OOP) في أنها Object-based وليست Object-Oriented ... بالنسبة لي لم يمر علي مبدأ من مبادئ البرمجـة الكائنية لم أستطع تطبيقه في السي بلس بلس .... البعض يقول أن السي بلس بلس لا تدعـم الكائنية بشكل كامل بعكس الجافا ... لم تمر علي الجافا .. ولكن polymorphism مدعوم في السي بلس بلس وليس مدعوم بلغة الجافا .... سؤالي هـنا: ما مدى دعـم لغة السي بلس بلس للـ OOP .. لا أريد كلام نظري ... ولماذا يقال أن الجافا والسي شارب تدعمان البرمجـة الشيئية بشكل أكبر ... ما هـو المميز فيهما من ناحية دعـم الـ OOP .
أخ سلطان من قال أنه ليس هناك فرق بين السي و السي بلس بلس نحن نعني فقط أن سي بلس بلس تحتوي السي و هذا ما قاله Bjarne
اقتباسC++ is a direct descendant of C that retains almost all of C as a subset
و معناه أن سي بلس بلس حفيد للغة السي و تحتفظ بمعظم ملامح السي
و كما قلت بنفسك
اقتباس- إحدى الأشياء التي تحققها لغـة السي بلس بلس ولا تحققها لغـة السي .. هـو إعطاء الحماية للأنواع ... أنظر مثلاً إلى هذا السطر .. الذي لن يشتكي منه المترجم ..
أي أن C++ provides stronger type-checking than C
شيء أخر أن C++ directly supports a wider range of programming styles than C. C++ is "a better C" in the sense that it supports the styles of programming done using C with better type checking and more notational support (without loss of efficiency). In the same sense, ANSI C is a better C than K&R C
بالإضافة أيضا إلى أن C++ supports data abstraction, object-oriented programming, and generic programming
أما بالنسبة إلى موضوع الOOP و ال OBP فمن قال أن سي بلس بلس ليست Object Oriented ؟؟؟
Object-Based Language معناها أن اللغة تدعم معظم مباديء الObject Oriented Programming و لكنها لا تدعم الوراثة (Inheritance) كفيجوال بيسيك 6 ولكن سي بلس بلس تدعم كل مباديء OOP و من ضمنها Multiple Inheritance أي الوراثة المتعددة التي لا تدعمها سي شارب نفسها أو حتى جافا
أما بالنسبة لمن يقول أن سي بلس بلس لا تدعم البرمجة الكائنية بشكل كامل فلأنه لا يعرفها جيدا و لكن سي بلس بلس تدعم مثلما قلت من قبل عدة Programming Paradigms ك Procedural Programming و OOP فهو غالبا يدعي أن سي بلس بلس لا تدعم OOP بالكامل لمجرد أنها تدعم Procedural Programming !!!
أنا كنت أظن أنكم تقولون أن السي هي نفسها السي بلس بلس :D :D ... ولا يوجد أي فرق بينهم سوى في الـ OOP
بالنسبة للمعلومـة التي سمعتها والتي لم تدخل عقلي أبداً :D هي أن السي بلس بلس object-based programming glanguage ..... فكنت أعرف أنها أصلاً خاطئـة ولكني سمعتها من مصدر موثوق لذلك قلت في نفسي ... ربما أني مخطيء :D :D !!!!!!!!!!!!!
لكن ما زلت اسأل :
اقتباسولماذا يقال أن الجافا والسي شارب تدعمان البرمجـة الشيئية بشكل أكبر ... ما هـو المميز فيهما من ناحية دعـم الـ OOP .
أنا كل ما تعلمته في الـ OOP ، استطعت تطبيقـه في السي بلس بلس .. أريد إجابة ممن تعلم الجافا أو السي شارب ... ولماذا أسمع هذا الكلام دائماً :D
يا اسامة نحن نتحدث عن الفرق بين لغة السى والسى بلس بلس, ولو راجعت اول مشاركتين لعرفت ان الاخ oop يقول انه لا فرق بين اللغتين سوى ان السى بلس بلس تدعم oop, وهذا كلام غير دقيق, هناك فرق كبير فى فلسفة اللغة وطريقة البرمجة, عندما تريد ان تتعلم لغى السى بلس بلس فلن تقوم بدراسة التقنيات التى تدرس فى كورس للغة السى والعكس..
اخى ابو السلاطين, درسنا فى العصر الحجري ايام ما كنت لسى فى الجامعة لغة إسمها small talk وهذه اللغة كان المدرس يقول لنا انها oop بعكس لغة السى بلس بلس..
انا كنت اعتقد ان لغة الـsmall talk تتميز عن لغة السى بلس بلس بإضافات, او ان لغة small talk عنها خصائص إضافية لا تمتلكها لغة السى بلس بلس, ولكن الامر ليس كذلك بل بالعكس لغة small talk تفتقد بعض الاشياء التى تتميز بها لغة السى بلس بلس..
فى لغة الsmall talk لا تستطيع تعريف متغيرات كما تفعل فى السى بلس بلس وإنما كل متغير لا بد ان يكون object ولا بد تستدعى الدوال التى تتحكم فى المتغيرات لاسناد قسمة الخ.., يعنى بإختصار لا يوجد سوى object و class فقط.. هذه هى اللغات التى تعتمد oop بالكامل..
لا اعرف بالنسبة للغة الc# ولكن لغة الجافا على ما اذكر كانت نفس الشئ, معى وجود بعض المتغيرات لا اذكرها ولكن كانت إما من نوع string او integer, ويوجد class إسمه INTEGER وclass إسمهSTRING وكل كلاس عنده جيش من الدوال التى تستطيع إستدعائها..
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
هذا الموضوع مغلق.