![http://parsviva.parsaspace.com/parsviva-post-image/c++.png](http://parsviva.parsaspace.com/parsviva-post-image/c++.png)
در هفته های گذشته و در پست های قبلی سایت در مورد زبان C و ++C صحبتهايي مطرح شد و از آنها به عنوان زبانهاي قدرتمند چند منظوره نام برديم. در ادامه سعي داريم كمي بيشتر به اين زبانها بپردازيم و البته تمركز ما بيشتر روي زبان شيگراي ++C خواهد بود.
در زبانهاي برنامهسازي ساخت يافته مثل C، برنامهها به فعاليتها توجه دارند. در حالي كه در زبان ++C و ساير زبانهاي شيگرا به اشيا توجه ميشود. در C واحد برنامهنويسي تابع است و در ++C واحد برنامهنويسي، كلاسي است كه اشيا سرانجام از آن نمونهسازي و ايجاد ميشوند. برنامهنويسان C، روي نوشتن توابع متمركز ميشوند. گروهي از فعاليتها كه كار مشتركي را انجام ميدهند، به شكل تابع در ميآيند و گروهي از توابع، برنامه را ايجاد ميكنند. دادهها نيز درC اهميت دارند. ولي فرض ميشود دادههاي مورد نياز فعاليتهايي كه تابع انجام ميدهد، مهياست. مشخصات سيستم و افعال موجود در صورت مساله به برنامهنويسC كمك ميكند، توابعي را تعيين كند كه بايد با هم كار كنند تا سيستم را پياده سازي كنند.
برنامهنويس++C روي ايجاد انواع جديدي به نام كلاس متمركز ميشود. در هر زبان انواع دادهاي مشخصي وجود دارد كه به آنها انواع ابتدايي گفته ميشود. به عنوان مثال نوع دادهايint مشخص كننده داده عددي صحيح، float داده عددي اعشاري، double داده عددي اعشاري بزرگ، char داده كاراكتري وbool داده دو مقداري درست يا غلط است.
برنامهنويس ميتواند با استفاده از انواع ابتدايي، انواع ديگري را ايجاد كند كه به آنها انواع جديد گفته ميشود.
توابع و اعضاي دادهاي
داخل هر كلاس، تعدادي داده وجود خواهد داشت كه به آنها اعضاي دادهاي كلاس گفته ميشود. علاوه بر اعضاي دادهاي، توابعي درون كلاس وجود دارد كه دادهها را دستكاري ميكنند. به اين توابع به اصطلاح متدهاي كلاس يا توابع عضو گفته ميشود.
لازم است بدانيم كه نمونهاي از هر نوع ابتدايي را يك متغير گوييم. يك متغير در واقع مقدار مشخصي از حافظه اصلي(RAM) است كه براي نگهداري يك مقدار رزرو ميشود. اندازه هر متغير در حافظه به نوعي داده اوليه بستگي دارد. به عنوان مثال در ++C ، متغيري از نوع دادهاي char يك بايت از حافظه را براي ذخيره يك كاراكتر رزرو ميكند و يا متغيري از نوع int ، بسته به نوع كامپايلر 2 يا 4 بايت از حافظه را براي نگهداري يك عدد صحيح رزرو ميكند. در صورتي كه نوع int به اندازه 2 بايت باشد به اين معني است كه ميتواند عددي بين 32768- تا 32767 را در خود نگه دارد.
كلاس در واقع يك نوع جديد از انواع داده اوليه است كه به نمونهاي از آن شي گفته ميشود. هر شي نيز مانند متغير، فضايي از حافظه را رزرو ميكند. ميزان اين فضا نيز مجموع اندازههاي متغيرهاي تعريف شده درون آن كلاس است.
در اينجا ذكر يك نكته ضروري به نظر ميرسد. ميدانيم كه درون يك كلاس علاوه بر اعضاي دادهاي توابعي نيز تعريف ميشوند. اين توابع گاهي ممكن است توابعي بزرگ و پيچيده باشند. بايد دقت داشت كه اندازه يك شي به اندازه توابع تعريف شده داخل كلاس مربوط ربطي نخواهد داشت و اين توابع در زمانهاي نياز به صورت مرجع از همان كلاس مربوطه فراخواني ميشوند. بنابراين اندازه يك شي، مستقل از تعداد و اندازه توابع تعريف شده داخل كلاس مربوطه، تنها به تعداد و نوع اعضاي دادهاي آن بستگي خواهد داشت.
گفتيم در زبان ساختيافته، افعال موجود در صورت مساله به برنامهنويس براي پيادهسازي سيستم كمك ميكند. اما در برنامهنويسي شيگرا مثل++C اسامي موجود در صورت مساله به برنامهنويس كمك ميكند تا كلاسهايي را تعيين كند كه با ايجاد اشيايي از آنها با يكديگر كار ميكنند سيستم را پيادهسازي كند.اگر نرمافزار از كلاس ساخته شود، از اين كلاسها ميتوان در برنامههاي ديگر نيز استفاده كرد. به همين دليل، كلاسها قابليت استفاده مجدد را دارند. ويژگي استفاده مجدد، نقش كليدي و مهمي در مهندسي نرمافزار و برنامهنويسي دارد. هر كلاس جديدي كه ايجاد ميكنيم، ممكن است قطعه ارزشمندي براي توليد نرمافزار محسوب شود و براي سرعت در برنامهنويسي ميتوان آن را در برنامههاي آينده به كار برد.
برخي ويژگيهاي C++
بسياري از افراد++C را يك زبان سطح بالا نميدانند و آن را از دسته زبانهاي مياني برميشمارند.
علت آن است كه اين زبان همانند زبان سطح پاييني مثل اسمبلي ميتواند مستقيما به حافظه دستيابي داشته باشد و با مفاهيم بيت، بايت و آدرس كار كند و از طرف ديگر، برنامههاي اين زبان، همچون زبانهاي سطح بالايي مثل پاسكال، از قابليت خوانايي بالايي برخوردارند. به عبارت ديگر، دستورالعملهاي اين زبان، به زبان محاورهاي انسان نزديك است كه اين ويژگي، مربوط به زبانهاي سطح بالاست.
++C زباني بسيار قدرتمند و انعطافپذير است. در اين زبان هيچ محدوديتي براي برنامهنويس وجود ندارد. هر آنچه را كه فكر ميكنيد ميتوانيد در اين زبان پيادهسازي كنيد.
++C زبان برنامهنويسي سيستم است. برنامههاي سيستم، برنامههايي هستند كه امكان بهرهبرداري از سختافزار و ساير نرمافزارها را فراهم ميكنند. سيستم عامل، كامپايلر، اسمبلر و نرمافزار مديريت بانك اطلاعاتي ازجمله برنامههاي سيستم هستند. پيش از اين نيز گفته بوديم كه سيستم عاملي همچون Unix يا Linux با استفاده از اين زبان نوشته شدهاند. همچنين اين زبان براي نوشتن نرمافزارهاي راهانداز سختافزارهاي جديد كه تازه طراحي ميشوند مناسب است.
بين زبان ++C و اسمبلي ارتباط نزديكي وجود دارد. ميتوان در اين زبان از تمامي قابليتهاي زبان اسمبلي بهره برد. اشخاصي كه به زبان اسمبلي مسلط هستند و به زبان ++C برنامه مينويسند گاهي براي نوشتن يك قطعه كد كه بايد به زبان ++C نوشته شوند ممكن است احساس كنند كه نوشتن آن به زبان اسمبلي برايشان راحتتر است. آنها با استفاده از قابليت موجود در ++C ميتوانند به طور مستقيم در برنامههاي ++C از كدهاي اسمبلي استفاده كنند++C . نسبت به حروف حساس است. (Case Sensitive) يعني در اين زبان بين حروف كوچك و بزرگ تفاوت است و تمام كلمات كليدي اين زبان با حروف كوچك نوشته ميشوند. به عنوان مثال كلمه for يك كلمه كليدي زبان ++C است، اما كلمه FOR كليدي نيست. براي جلوگيري از وقوع خطاهاي دستوري، توصيه ميشود كه كل يك برنامه در زبان ++C با حروف كوچك نوشته شود. مگر اين كه قانونمندي خاصي در حروف كوچك و بزرگ توسط برنامهنويس تعريف و تعيين شود و همچنين به اين قانونمندي عادت داشته باشد و راحت به آن عمل كند.
تعداد كلمات كليدي زبان ++C كم است و به عبارتي اين زبان، زباني نسبتا كوچك است. البته نبايد به اشتباه تصور شود كه هر چه تعداد كلمات كليدي يك زبان بيشتر باشد، آن زبان قدرتمندتر است. به واقع اين دو مساله هيچ ربطي به هم ندارند. به عنوان مثال زباني مثل Basic با حدود 150 كلمه كليدي، توانايي كمتري نسبت به ++C كه زباني با تعداد كلمات كليدي كمتر است، دارد.
هر برنامه ++C از قطعاتي به نام كلاس و تابع تشكيل شده است. براي ايجاد برنامه ميتوانيد كلاس يا تابع موردنياز را بنويسيد، اما توابع و كلاسهاي بسيار زيادي از قبل نوشته شده همراه كامپايلر ++C وجود دارد كه برنامهنويس ميتواند براي ايجاد برنامه از آنها استفاده كند. بنابراين در دنياي برنامهنويسي دو مساله مطرح است. يكي خود زبان و ديگري چگونگي استفاده از توابع و كلاسهاي آماده موجود موسوم به توابع كتابخانهاي.
قابليت حمل
قابليت حمل اصطلاحي است كه در برنامهنويسي مطرح است و به اين معناست كه بتوان يك برنامه را كه در يك نوع رايانه نوشته شده است. بدون تغيير يا با اعمال اندك تغييرات، در رايانه نوع ديگر نيز اجرا كرد. ++C اين قابليت را دارد كه بتوان برنامه نوشته شده را در رايانه ديگر با كامپايلر مخصوص همان رايانه مجددا كامپايل و استفاده كرد. به اين خصوصيت زبان قابليت حمل گفته ميشود. به عبارتي زبان ++C زباني قابل حمل است. البته توجه داشته باشيد كه تمام رايانههاي با پردازنده اينتل از يك نوع به شمار ميروند. قابليت حمل براي رايانههايي با انواع مختلف مطرح است.
با توجه به اين توضيحات به راحتي ميتوان نتيجه گرفت كه زبان اسمبلي زباني قابل حمل نيست. زيرا همان طور كه قبلا نيز اشاره كرديم، هر پردازنده دستورالعملهاي خاص خود را دارد و زبان اسمبلي آن با زبان اسمبلي پردازندههاي ديگر متفاوت است. بنابراين نميتوان برنامه مربوط به يك پردازنده را بدون تغيير و حتي با اندك تغيير براي پردازنده ديگر اجرا كرد و بايد آن برنامه به طور كلي براي پردازنده ديگر بازنويسي شود. اين يكي از بزرگترين اشكالات زبان غيرقابل حملي مثل اسمبلي است.
زبان ++C قابليتهاي بسيار ديگري نيز دارد كه از برخي آنها چشمپوشي كرده و برخي را در جاي مناسبي مطرح خواهيم كرد.