زبان برنامهنویسی سي پلاس پلاس ++C
زبان برنامهنویسی ++C (سی پلاس پلاس) یک زبان برنامهنویسی رایانهای همهمنظوره، شیءگرا، سطح بالا و چندرگه (که از برنامهنویسی رویهای، تجرید دادهها و برنامهنویسی شیءگرا پشتیبانی میکند)، عمومی و با قابلیتهای سطح بالا و سطح پایین میباشد.
این زبان دارای قابلیتهای انواع داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از برنامهنویسی ساختیافته، برنامهنویسی شیءگرا، برنامهنویسی جنریک است. ++C به همراه جد خود C از پرطرفدارترین زبانهای برنامهنویسی تجاری هستند.
زبان ++c یک زبان سطح میانی در نظر گرفته میشود. این زبان دارای قابلیت زبانهای سطح بالا و پایین بهصورت همزمان است. زبان ++C توسط بییارنه استراستروپ دانمارکی در سال ۱۹۷۹ درآزمایشگاههای بل (Bell Labs)، برای بهبود زبان سی و بر مبنای آن ساخته شد و آن را “C با کلاس” (C With Classes) نامگذاری نمودند. در سال ۱۹۸۳ به ++c تغییر نام داد. توسعه با اضافه نمودن کلاسها و ویژگیهای دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه، قالب توابع، و پردازش استثنا انجام شد. این زبان برنامهنویسی در سال ۱۹۹۸ تحت نام ISO/IEC ۱۴۸۸۲:۱۹۹۸ استاندارد شد. نسخه فعلی استاندارد این زبان ISO/IEC ۱۴۸۸۲:۲۰۰۳ است. نسخه جدیدی از استاندارد (که به صورت غیررسمی C++۰x نامیده میشود) در دست تهیه است.
تاریخچه زبان ++C
استراستروپ کار بر روی زبان «c با کلاس» را در سال ۱۹۷۹ آغاز کرد. ایده ساخت این زبان جدید در زمان کار بر روی تز دکترای خود به ذهن استراستروپ خطور نمود. او متوجه شد که سیمولا دارای ویژگیهایی مناسب برای ساخت برنامههای بسیار بزرگ است اما برای استفاده عملی بسیار کند است اما BCPL با وجود سرعت بسیار زیاد برای ساخت برنامههای بزرگ بسیار سطح پایین است. زمانی که استراستروپ کار خود را در آزمایشگاههای بل (Bell Labs) آغاز نمود با مشکل تحلیل هسته unix با توجه به محاسبات توزیع شده روبرو شده بود. با یادآوری تجربیات خود در دوران دکترا، او زبان C را با استفاده از ویژگیهای سیمولا گسترش داد. C به این دلیل انتخاب شد که یک زبان عمومی، سریع، قابل حمل، و بهصورت گسترده در حال استفاده بود. علاوه بر C و سیمولا زبانهای دیگری مانند ALGOL ۶۸، ADA، CLU، ML نیز بر ساختار این زبان جدید اثر گذاشت.
در ابتداویژگیهای کلاس، کلاسهای مشتق شده، کنترل نوع قوی، توابع درونخطی، و آرگومانهای پیشفرض از طریق Cfront به C اضافه شد. اولین نسخه تجاری در سال ۱۹۸۵ ارائه شد. در سال ۱۹۸۳ نام زبان از «C با کلاس» به ++C تغییر یافت.
ویژگیهای دیگر شامل توابع مجازی، سربارگزاری عملگر و نام تابع، ارجاعات، ثوابت، کنترل حافظه توسط کاربر بهصورت آزاد، کنترل نوع بهتر، و توضیحات یکخطی به صورت BCPL با استفاده از «//» نیز به آن اضافه شد. در سال ۱۹۸۵ اولین نسخه زبان برنامهنویسی ++C انتشار یافت و مرجع مهمی برای این زبان فراهم شد در حالی که هیچ استاندارد رسمیای وجود نداشت. در سال ۱۹۸۹ ویرایش ۲٫۰ از زبان ++C ارائه شد. ویژگیهای جدیدی مانند ارثبری چندگانه، کلاسهای انتزاعی، اعضای ایستای توایع، اعضای ثابت تابع، و اعضای حفاظت شده به آن اضافه شد.
در سال ۱۹۹۰ «راهنمای مرجع ++C» منتشر شد. این کار بنیان استانداردهای بعدی شد. آخرین ویژگیهای اضافه شده شامل موارد زیر بودند:
قالب توابع، استثناها، فضاهای نام، تبدیلات جدید، و یک نوع داده منطقی.
در حین تکامل ++C کتابخانهٔ استاندارد نیز بهوجود آمد. اولین نسخهٔ کتاب استاندارد شامل کتابخانهٔ جریانات I/O بود که جایگزین printf و scanf شد. در ادامه مهمترین ویژگی اضافه شده Standard Template Library بودهاست.
نامگذاري ++C
این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳) است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر هنوز هم ++C به عنوان ابرساختار C شناخته میشود. آخرین نام از عملگر ++ در زبان C (که برای افزایش مقدار متغیر به اندازه یک واحد بکار میرود) و یک عرف معمول برای نشان دادن افزایش قابلیتها توسط + ناشی گشتهاست. با توجه به نقل قولی از استراستروپ: «این نام ویژگیها تکاملی زبان در C را نشان میدهد.» +C نام زبانی غیرمرتبط به این زبان است. استراستروپ مبدا این نام را در فصل اول کتاب خود «زبان برنامهنویسی ++C» اشاره مینماید که معنی دیگر ++C را میتوان در ضمائم کتاب جرج ارول بنام ۱۹۸۴ یافت. در سه قسمت از زبان تخیلی Newspeak «کلمات C» برای اشاره به لغات فنی و حرفهای بکار میرود. «دو علامت +» برای ایجاد صفات عالی از صفات Newspeak به کار میرفت بنابراین ++C به معنای زبانی با بیشترین شباهت به C است. وقتی که به صورت خصوصی از ریک ماسکیتی در مورد این اسم سوال شد او در جواب گفت که این اسم بصورت خودمانی در بین آنها به کار میرفتهاست و تصور نمیکردند که این نام بصورت نام رسمی این زبان درآید.
توسعه آینده ++C
++C همچنان در حال تکامل است تا نیازهای آینده را پاسخگو باشد. نسخه جدید استاندارد ++C در حال بررسی است و تحت عنوان C++۰x است که انتظار میرود در سال ۲۰۱۰ منتشر گردد. تغییرات کنونی نشان میدهد که همچنان به صورت چندمدلی ++C تاکید میگردد. توسعههای مهم پشتیبانی از چندرشتهای و مفاهیمی برای راحت نمودن کار با قالبهاست. اضافه نمودن ویژگی جمعآوری زباله به آن به شدت مورد بحث است. Boost.org گروهی برای بیشترین استفاده از ویژگیهای فعلی ++C میباشد. آنها ویژگیهای تابعی و فرابرنامهنویسی آن را گسترش میدهند و در مورد ++C به کمیته استاندارد نصیحتهایی نمودهاست که کدام ویژگیها خوب عمل نمیکنند و کدامها نیاز به توسعه دارند.
کتابخانه استاندارد ++C
در سال ۱۹۹۸ استاندارد ++C شامل دو بخش هسته زبان و کتابخانه استاندارد ++C است. این کتابخانه شامل بیشتر بخشهای STL و کتابخانه استاندارد C است. بیشتر کتابخانههای ++C در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانهها را میتوان در زبانهایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند.البته با توجه به ویژگیهای کامپایلر مشخص خواهد شد که کدام زبان را میتوان استفاده نمود.
کتابخانه استاندارد ++C شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگهدارندهها (مانند vector و list)، تکرارکنندهها (اشارهگرهای عمومی شده) برای شبیهسازی دسترسی مانند آرایه الگوریتمهایی برای جستجو و مرتبسازی در آنها وجود دارند. نقشهها (نقشههای چندگانه) (آرایه شرکتپذیر) و مجموعهها (مجموعههای چندگانه) واسطهای عمومی فراهم میسازند.
در نتیجه با استفاده از قالب تابع، الگوریتمهای جنریک با هر نگهدارنده و دارای تکرارکننده عمل نماید. همانند C ویژگیهای کتابخانه را میتوان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود.
C دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شدهاند. استفاده از کتابخانه استاندارد – مانند std::vector یا std::string به جای آرایههای C- موجب ایجاد برنامههای مطمئنتر شدهاست. STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد ++C بودهاست. استاندارد عبارت STL را بکار نمیبرد بلکه آن را بخشی از کتابخانه میداند اما مردم هنوز هم آن را برای جداسازی بخشهای مختلف کتابخانه با این نام بکار میبرند.(جریانهای ورودی/خروجی، جهانیسازی، تشخیص، زیرمجموعه کتابخانه C) بیشتر کامپایلرها کتابخانه استاندارد و STL را پیادهسازی مینماید. پیادهسازیهای مستقلی نیز همانند STLport نیر وجود دارند.
پروژههای دیگر نیز پیادهسازیهای خود را از STL با توجه به اهداف خود بوجود میآورند.
ویژگیهای معرفی شده در ++C
در مقایسه با C زبان ++C ویژگیهای جدیدی را معرفی نمودهاست مانند تعریف متغیر به عنوان عبارت، تغییر نوعهای همانند تابع، new/delete، نوع داده bool، توابع درونخطی، آرگومان پیشفرض، گرانبارسازی عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاسها (شامل تمام ویژگیهای مربوط به کلاسها همانند وراثت، اعضای تابع، توابع مجازی، کلاسهای انتزاعی، و سازندهها)، قالبها، پردازش استثنا، کنترل نوع زمان اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>).
برخلاف باور عموم ++C نوع داده ثابت را معرفی ننمودهاست. کلمه const کمی پیش از استفاده از این کلمه در ++C توسط زبان C بصورت رسمی بکار گرفته شد. در بعضی حالات ++C تعداد کنترل نوع بیشتری نسبت به زبان C انجام میدهد.
توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان ++C به کار گرفته شد.
بعضی ویژگیهای ++C بعداً توسط C به کار گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و کلمه inline با وجود اینکه تعریف این کلمه در C با تعریف آن در زبان ++C هماهنگی ندارد. همچنین در C ویژگیهایی معرفی شدهاست که در ++C وجود ندارند مانند ماکروهای قابل تغییر و استفاده بهتر از آرایهها به عنوان آرگومان. بعضی کامپایلرها این ویژگیها را پیاده نمودهاند اما در بقیه این ویژگیها موجب ناهماهنگی میگردد.
ساختار برنامهها
ساختار برنامهها در این زبان بدین صورت است که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه برنامه داشته باشد.
هر برنامه معمولاً از تعداد زیادی فایل تشکیل میشود که به هم الحاق میگردند (با دستور include) و به این فایلهای الحاقی سرآیند (Header) میگوییم. فایلهای الحاقی حاوی کدها یا نسخههای اجرایی کلاسها (مجموعه متغیرها و توابع) میباشند که در بدنه اصلی برنامه از آنها استفاده میشود.
معمولاً هر کلاس (که تعریف یک نوع دادهای با متدهای مربوط به آن است) را در یک سرآیند مینویسند. هر سرآیند که معمولاً تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایلهای پیاده سازی به زبان ++C یا پیاده سازیهای کامپایل شده (به صورت فایل اشیا مانند dll یا so یا … ) میتواند به کار برده شود. به مجموعههای یکپارچهای از کلاسهای پیاده سازی شده (به صورت فایلهای سرآیند با پیاده سازیهای کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار میروند، یک کتابخانه ++C گفته میشود و قدرت اصلی این زبان در امکان به کارگیری کتابخانههای آماده میباشد.
کتابخانههای بزرگ ++C مانند STL، MFC، QT و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کردهاند.
زبان برنامه نويسي ++C بر زبان هاي برنامه نويسي ديگر مانند:
پیاچپی (PHP)
سیشارپ جاوا (#C)
پرل (Perl)
تاثير گذاشته است.