آموزش سی پلاس پلاس

آنچه در این صفحه می خوانید :

معرفی زبان سی (C)

C یک زبان برنامه نویسی همه منظوره است که از برنامه نویسی ساخت یافته، دامنه متغیر واژگان و بازگشتی پشتیبانی می کند، در حالی که یک سیستم نوع استاتیک مانع از فعالیت های ناخواسته می شود. C سازه هایی را فراهم می کند که به صورت کارآمد در دستورالعمل های دستگاه معمولی قرار گرفته و در برنامه هایی که قبلاً به زبان اسمبلی کدگذاری شده اند، استفاده پایدار پیدا کرده است. این برنامه ها شامل سیستم عامل ها و نرم افزارهای مختلف کاربردی برای رایانه ها تا سیستم های جاسازی شده است.

C ابتدا در سال های 1972 تا 1973 توسط دنیس ریچی در آزمایشگاه های بل ساخته شد تا برنامه های کاربردی روی یونیکس اجرا شود. بعداً برای اجرای مجدد هسته سیستم عامل یونیکس استفاده شد. در طول دهه 1980، C به تدریج محبوبیت پیدا کرد. امروزه، این یکی از پرکاربردترین زبان های برنامه نویسی است که کامپایلرهای C از فروشندگان مختلف برای اکثر معماری های رایانه ای موجود و سیستم عامل ها در دسترس است. C از سال 1989 توسط ANSI استاندارد شده است.

C یک زبان رویه ای ضروری است. این طراحی شده است تا با استفاده از یک کامپایلر نسبتاً ساده به منظور دستیابی به سطح پایین سازه های حافظه و زبان که به صورت کارآمد در دستورالعمل های ماشین، کاملاً با حداقل پشتیبانی در زمان اجرا، گرداوری شده باشد. با وجود قابلیت های سطح پایین، این زبان برای تشویق برنامه نویسی پلتفرم ساخته شده است. یک برنامه C سازگار با استانداردها که با قابلیت حمل و نقل نوشته شده است می تواند برای طیف گسترده ای از سیستم عامل های رایانه ای و سیستم عامل ها با چند تغییر در کد منبع آن تهیه شود. این زبان در سیستم عامل های مختلف، از میکروکنترلرهای تعبیه شده گرفته تا ابر رایانه ها موجود است.

زبان C برای ایجاد برنامه های کاربردی سیستم که به طور مستقیم با دستگاه های سخت افزاری مانند درایورها، Kernel هاو غیره ارتباط برقرار می کند، توسعه داده شده است. برنامه نویسی C به عنوان پایه برای دیگر زبان های برنامه نویسی در نظر گرفته شده است، به همین دلیل است که به عنوان زبان مادر شناخته می شود. زبان برنامه نویسی C کامل و جامع، ساخت یافته، دستوری و روندگرا است که به هیچ سخت افزار یا سیستم عامل خاصی وابستگی ندارد.

C را می توان با روش های زیر تعریف کرد:

  • زبان مادر (Mother language) :زبان C به عنوان زبان مادر همه زبان های برنامه نویسی مدرن در نظر گرفته شده است، زیرا اکثر کامپایلر ها، JVM ها، Kernel ها و غیره با زبان C نوشته شده است و بیشتر زبان های برنامه نویسی از syntax آن پیروی می کنند مانند: سی شارپ، جاوا، ++C، و غیره. زبان C مفاهیم اصلی مانند آرایه، رشته ها، توابع، مدیریت فایل ها و غیره را فراهم می کند.
  • زبان برنامه نویسی سیستم (System programming language) :یک زبان برنامه نویسی سیستم، برای ایجاد نرم افزار سیستمی استفاده می شود. زبان C یک زبان برنامه نویسی سیستم است زیرا می توان آن را برای برنامه نویسی سطح پایین (مثلا درایورها و کرنل ها) استفاده کرد. به طور کلی برای ایجاد دستگاه های سخت افزاری، سیستم عامل، درایور، کرنل و غیره استفاده می شود. به عنوان مثال، هسته لینوکس در C نوشته شده است. C را نمی توان مثل Java، دات نت، پی اچ پی و غیره برای برنامه نویسی وب استفاده کرد.
  • زبان برنامه نویسی رویه ای (Procedure-oriented programming language) : یک رویه به عنوان یک تابع، روش، روال، زیرروال و غیره شناخته می شود. یک زبان رویه ای یک سری از مراحل را برای حل مشکل مشخص می کند و برنامه را به توابع، ساختارهای داده و غیره تقسیم می کند. C زبان رویه ای است. در C متغیرها و توابع نمونه قبل از استفاده باید اعلام شوند.
  • زبان برنامه نویسی ساختاری (Structured programming language):یک زبان برنامه نویسی ساختاری، زیر مجموعه ای از زبان رویه ای است. ساختار به این معنی است که یک برنامه را به قطعات یا بلوک هایی تقسیم می کند تا درک آن آسان تر شود. در زبان C، برنامه با استفاده از توابع به قطعاتی کوچکتر تقسیم می شود. این باعث می شود که برنامه به راحتی درک و اصلاح شود.
  • زبان برنامه نویسی سطح متوسط (Mid-level programming language):زبان سی به عنوان یک زبان سطح متوسط در نظر گرفته می شود زیرا از ویژگی های زبان های سطح پایین و سطح بالا پشتیبانی می کند. برنامه زبان C به کد اسمبلی تبدیل می شود، C از pointer arithmetic (سطح پایین) پشتیبانی می کند، اما مستقل از دستگاه است (ویژگی سطح بالا).

تاریخچه زبان سی (C)

منشأ C با توسعه سیستم عامل یونیکس کاملاً مرتبط است، که در اصل با زبان اسمبلی بر روی PDP-7 توسط دنیس ریچی و کن تامپسون پیاده سازی شده است و چندین ایده از همکاران را در برمی گیرد. سرانجام، آنها تصمیم گرفتند سیستم عامل را به PDP-11 منتقل کنند. نسخه اصلی PDP-11 یونیکس نیز به زبان اسمبلی تولید شده است. تامپسون یک زبان برنامه نویسی را برای ایجاد برنامه های کاربردی برای سیستم عامل جدید می خواست. در ابتدا، او سعی کرد تا کامپایلر Fortran بسازد، اما به زودی این ایده را رها کرد. در عوض، او یک نسخه برش خورده از زبان برنامه نویسی سیستم های اخیراً توسعه یافته BCPL ایجاد کرد. توضیحات رسمی BCPL در آن زمان موجود نبود و تامپسون اصلاح نحو را کم حرف تر می کرد، مشابه B اما ساده تر. با این وجود، ابزارهای کاربردی کمتری در نهایت به B نوشتند زیرا خیلی آهسته بود و B نتوانست موفق شود.

در سال 1972، ریچی شروع به بهبود B کرد، که منجر به ایجاد یک زبان جدید C شد. کامپایلر C و برخی از برنامه های کاربردی ساخته شده با آن در نسخه 2 یونیکس شد. در نسخه 4 یونیکس که در نوامبر 1973 هسته یونیکس توسط C، منتشر شد. در این زمان، زبان C ویژگی های قدرتمندی مانند انواع ساختار را به دست آورد. یونیکس یکی از اولین هسته های سیستم عامل بود که به زبانی غیر از اسمبلی اجرا شد.


معرفی زبان سی پلاس پلاس (++C)

++C یک زبان برنامه نویسی شی گرا و یک توسعه از زبان C است. ++C یک زبان همه منظوره، حساس به حروف، با نوشتار آزاد است که از برنامه نویسی شی گرا، رویه ای و عمومی پشتیبانی می کند. ++C یک زبان سطح متوسط است، زیرا هر کدام از ویژگی های زبان سطح بالا و پایین را پوشش می دهد. توسط Bjarne Stroustrup بعنوان پسوند زبان برنامه نویسی C یا "C with Classes" ایجاد شده است. این زبان با گذشت زمان بطور چشمگیری گسترش یافته است و ++C مدرن علاوه بر امکاناتی برای دستکاری حافظه سطح پایین، دارای ویژگی های شی گرا، عمومی و عملکردی نیز می باشد. تقریباً همیشه به عنوان یک زبان کامپایل شده اجرا می شود و بسیاری از فروشندگان کامپایلرهای ++C از جمله بنیاد نرم افزار رایگان، LLVM، مایکروسافت، اینتل، اوراکل و IBM را ارائه می دهند، بنابراین در بسیاری از سیستم عامل ها در دسترس است.

++C با تعصب نسبت به برنامه نویسی سیستم و نرم افزار جاسازی شده، محدود به منابع و سیستم های بزرگ، با عملکرد، کارآیی و انعطاف پذیری استفاده به عنوان نقطه عطف طراحی آن شد. ++C همچنین در بسیاری از زمینه های دیگر مفید واقع شده است که نقاط قوت آن زیرساخت های نرم افزاری و برنامه های محدود شده از منابع، از جمله برنامه های دسکتاپ، سرورها (به عنوان مثال تجارت الکترونیکی، جستجوی وب یا سرورهای SQL) و برنامه های مهم برای عملکرد (به عنوان مثال سوئیچ تلفن) یا کاوشگرهای فضایی).

++C توسط سازمان بین المللی استاندارد سازی (ISO) استاندارد شده است و آخرین نسخه استاندارد توسط ISO در دسامبر سال 2017 (به طور غیر رسمی با عنوان C++ 17 شناخته شده است) منتشر شده است. استاندارد فعلی C++ 17 با ویژگی های جدید و یک کتابخانه استاندارد بزرگتر برتری دارد. قبل از استانداردسازی اولیه در سال 1998، ++C توسط دانشمند کامپیوتر دانمارکی Bjarne Stroustrup در آزمایشگاه های بل از سال 1979 به عنوان پسوند زبان C توسعه داده شد. او یک زبان کارآمد و انعطاف پذیر مشابه C می خواست که ویژگی های سطح بالایی را نیز برای برنامه سازمان فراهم می آورد. نحوه کامپایل و اجرای برنامه ++C به دو صورت از طریق منوی compile و میانبر ctrl+f9 انجام می شود.

تاریخچه زبان سی پلاس پلاس (++C)

در سال 1979، Bjarne Stroustrup، دانشمند دانمارکی رایانه، شروع به کار در ++C کرد. انگیزه برای ایجاد یک زبان جدید ناشی از تجربه استروستروپ در برنامه نویسی برای پایان نامه دکتری وی است. استروستروپ دریافت که Simula دارای ویژگی هایی است که برای توسعه نرم افزارهای بزرگ بسیار مفید است، اما زبان برای استفاده عملی خیلی آهسته بود، در حالی که BCPL سریع اما بسیار سطح پایین بود تا برای توسعه نرم افزارهای بزرگ مناسب باشد. هنگامی که استروستروپ شروع به کار در AT&T Bell Labs کرد، وی مشکل تجزیه و تحلیل هسته یونیکس را با توجه به محاسبات توزیع شده داشت. با یادآوری دکترای خود تجربه، Stroustrup برای تقویت زبان C با ویژگی های شبیه Simula آماده کرده است. C به دلیل داشتن کلی هدف، سریع، قابل حمل و استفاده گسترده از آن انتخاب شد.

پس از 98++++C،C به تدریج تکامل یافت، تا اینکه در سال 2011، استاندارد C++ 11 منتشر شد، با اضافه کردن چندین ویژگی جدید، افزودن کتابخانه استاندارد بیشتر و فراهم آوردن امکانات بیشتر برای برنامه نویسان ++C . پس از بروزرسانی جزئی C++ 14 که در دسامبر 2014 منتشر شد، افزودنی های مختلف جدیدی در C++ 17 معرفی شد و تغییرات دیگری نیز برای سال 2020 برنامه ریزی شده است. در سال 2019،++C اکنون چهارمین زبان محبوب برنامه نویسی، پس از جاوا، سی و پایتون است.

ویژگی های سی پلاس پلاس (++C)

  • ساده :++C یک زبان ساده است به این معنی که رویکرد ساختاری (برای شکستن مشکل به قطعات)، مجموعه غنی از توابع کتابخانه، انواع داده و غیره فراهم می کند.
  • مستقل از ماشین یا قابل حمل : بر خلاف زبان اسمبلی، برنامه های C را می توان در بسیاری از ماشین ها با کمی یا بدون تغییر اجرا کرد. اما مستقل از پلتفرم نیست.
  • زبان برنامه نویسی سطح متوسط : سی پلاس پلاس نیز برای انجام برنامه نویسی سطح پایین استفاده می شود. این زبان برای توسعه برنامه های کاربردی سیستم مانند کرنل، درایور و غیره استفاده می شود. همچنین از ویژگی زبان سطح بالا پشتیبانی می کند. به همین دلیل است که به عنوان زبان میان رده شناخته می شود.
  • زبان برنامه نویسی ساختاری: ++C یک زبان برنامه نویسی structured است به این معنا که ما می توانیم با استفاده از توابع برنامه را به قطعاتی بشکنیم تا آسانتر درک شود.
  • کتابخانه غنی Rich Library : سی پلاس پلاس بسیاری از توابع داخلی را ایجاد می کند که باعث توسعه سریع می شود.
  • مدیریت حافظه : سی پلاس پلاس از ویژگی تخصیص حافظه پویا پشتیبانی می کند. در زبان ++C، می توانیم حافظه اختصاص داده شده را در هر زمان با فراخوانی تابع free آزاد کنیم.
  • سرعت : زمان کامپایل و اجرای زبان ++C سریع است.
  • اشاره گرها :در ++C می توان با استفاده از اشاره گرها به طور مستقیم با حافظه ارتباط برقرار کرد و همچنین می توان اشاره گرها را برای حافظه، ساختارها، توابع، آرایه ها و غیره استفاده نمود.
  • توابع بازگشتی : در ++C، می توان تابع را درون خودش صدا زد این قابلیت استفاده مجدد را برای هر تابع فراهم می کند.
  • قابلیت گسترش :زبان ++C قابل گسترش است زیرا می تواند به راحتی ویژگی های جدیدی را به کار گیرد.
  • شیء گرا :سی پلاس پلاس زبان برنامه نویسی شی گرا OOP است که توسعه و تعمیر و نگهداری را آسان تر می کنند، در حالی که در زبان برنامه نویسی Procedure-oriented، اگر کد رشد کند، مدیریت آن سخت می شود.
  • مبتنی بر کامپایلر : ++C یک زبان برنامه نویسی مبتنی بر کامپایلر است، یعنی بدون کامپایل هیچ برنامه ++C را نمی توان اجرا کرد. ابتدا باید برنامه خود را با استفاده از کامپایلر،کامپایل و سپس اجرا کرد.

ساختار زبان سی پلاس پلاس (++C)

زبان ++C دو کامپوننت اصلی دارد: نقشه برداری مستقیم از ویژگی های سخت افزاری که در درجه اول توسط زیر مجموعه C تهیه می شود و انتزاعات صفر به بالا بر اساس آن نقشه ها. استروستروپ ++C را به عنوان "یک زبان برنامه نویسی سبک وزن برای ساخت و استفاده از انتزاعات کارآمد و ظریف" توصیف می کند. ارائه دسترسی سخت افزاری و انتزاع سخت افزاری اساس ++C است.

++C بیشتر سینتکس C را به ارث می برد. آنچه در زیر آمده است نسخه Bjarne Stroustrup از Hello world program است که از امکانات جریان کتابخانه استاندارد ++C برای نوشتن پیام به خروجی استاندارد استفاده می کند:

#include <iostream>
int main()
{
    std::cout << "Hello, world!\n";
}

ذخیره سازی آبجکت

++C از چهار نوع مدیریت حافظه پشتیبانی می کند: ذخیره سازی استاتیک در مدت زمان آبجکت، ذخیره سازی رشته در مدت زمان آبجکت، ذخیره سازی خودکار در مدت زمان آبجکت و ذخیره سازی پویا در مدت زمان آبجکت.

الگو ها (Templates)

الگوهای ++C برنامه نویسی عمومی را فعال می کنند. ++C از الگوهای تابع، کلاس، نام مستعار و متغیر پشتیبانی می کند. الگوها ممکن است با انواع، ثابت های زمان کامپایل و سایر الگو ها پارامتر شوند. الگو ها با قید فوریت در زمان کامپایل اجرا می شوند. برای ایجاد یک الگو، کامپایلرها استدلال های خاص را برای پارامترهای یک الگو جایگزین می کنند تا یک تابع یا نمونه کلاس ایجاد کنند. الگو ها ابزاری قدرتمند هستند که می تواند برای برنامه نویسی عمومی، برنامه نویسی الگو و بهینه سازی کد مورد استفاده قرار گیرد. استفاده از الگو ممکن است اندازه کد را افزایش دهد زیرا هر لحظه قالب یک نسخه از کد الگو را تولید می کند: یکی برای هر مجموعه از آرگومان های الگو، که به همان اندازه یا کمتر است. این برخلاف ژانر های ران تایم است که در زبان های دیگر (به عنوان مثال جاوا) مشاهده می شود و در زمان کامپایل تایپ آن پاک می شود و یک بدنه الگوی واحد حفظ می شود.

علاوه بر این، الگو ها یک مکانیسم کامپایل زمان در ++C هستند که Turing کامل است، به این معنی که هر گونه محاسبه قابل بیان توسط یک برنامه رایانه ای می تواند به نوعی توسط یک metaprogram الگو قبل از زمان اجرا محاسبه شود.

به طور خلاصه، الگو یک تابع یا کلاس پارامتری کامپایل شده است که بدون اطلاع از آرگومان های خاصی که برای فوریت استفاده می شود، نوشته شده است. پس از فوریت، کد حاصل معادل کدی است که مخصوص آرگومان های مصوب نوشته شده است. با این روش، الگو ها راهی را برای جدا کردن جنبه های عمومی، بطور گسترده توابع و کلاس ها از جنبه های خاص فراهم می کنند، بدون اینکه عملکرد را به دلیل انتزاع انجام دهند.

آبجکت ها

++C ویژگی های برنامه نویسی شی گرا (OOP) را همراه دارد. کلاس هایی را ارائه می دهد، که چهار ویژگی معمول در زبان های OOP (و برخی از زبان های غیر OOP) موجود است: انتزاع، کپسوله سازی، وراثت و چندشکلی. یکی از ویژگی های بارز کلاس های ++C در مقایسه با کلاس های سایر زبان های برنامه نویسی، پشتیبانی از تخریب کننده های قطعی است که به نوبه خود پشتیبانی از مفهوم منابع را فراهم می کند مفهوم Initialization (RAII) است.

  • مخفی کردن اطلاعات

Encapsulation یا مخفی کردن اطلاعات برای اطمینان از استفاده ساختار داده ها و اپراتورها برای عناوین در نظر گرفته شده و ایجاد مدل استفاده برای توسعه دهنده است. ++C امکان تعریف کلاس ها و توابع را به عنوان مکانیسم اولیه محصور سازی فراهم می کند. در داخل یک کلاس، اعضا می توانند به صورت علنی، محافظت شده یا خصوصی اعلام شوند تا صریحاً مخفی سازی شوند. یک عضو عمومی کلاس برای هر تابعی در دسترس است. یک عضو خصوصی فقط برای توابعی که عضو آن کلاس هستند و توابع و کلاس هایی که صریحاً اجازه دسترسی توسط کلاس را دارند، قابل دسترسی است.

اصل شی گرا، مخفی کردن اطلاعات همه و فقط توابع دسترسی به نمای داخلی یک نوع را تضمین می کند. ++C از طریق توابع عضو و توابع دوست این اصل را پشتیبانی می کند، اما آن را اجرا نمی کند. برنامه نویسان می توانند بخش ها یا تمام نمایندگی یک نوع را عمومی اعلام کنند و به آنها اجازه داده می شود که نهادهای عمومی جزئی از نمایندگی یک نوع نباشند. بنابراین، ++C نه تنها از برنامه نویسی شی گرا بلکه از سایر پارادایم های تجزیه مانند برنامه نویسی مدولار پشتیبانی می کند.

به طور کلی این کار خوب است که همه داده ها را خصوصی یا محافظت کنیم، و فقط آن دسته از توابع را که جزئی از یک رابط حداقل برای کاربران کلاس است، عمومی شوند. این می تواند جزئیات پیاده سازی داده ها را پنهان کند، به طراح این امکان را می دهد که بعداً اساساً بدون تغییر رابط، اجرا را تغییر دهد.

  • وراثت

وراثت به یک نوع داده اجازه می دهد خصوصیات انواع دیگر داده ها را بدست آورد. وراثت از یک کلاس پایه ممکن است عمومی، محافظت شده یا خصوصی اعلام شود. این مشخصه دسترسی تعیین می کند که آیا کلاس های نامربوط و مشتق شده می توانند به اعضای ارثی و محافظت شده کلاس پایه دسترسی پیدا کنند. فقط وراثت عمومی مطابق با آنچه که معمولاً منظور از "ارث" است، انجام می شود. دو شکل دیگر بسیار کمتر مورد استفاده قرار می گیرند. اگر مشخص کننده دسترسی حذف شود، "کلاس" به صورت خصوصی به ارث می رسد، در حالی که "ساختار" به طور عمومی به ارث می رسد. کلاس های پایه ممکن است مجازی اعلام شوند. این به ارث مجازی گفته می شود. وراثت مجازی تضمین می کند که فقط یک نمونه از کلاس پایه در نمودار میراث وجود داشته باشد، از برخی از ابهامات ارث های متعدد جلوگیری می کند.

وراثت چندگانه، ویژگی ++C است که در اکثر زبان های دیگر یافت نمی شود، و اجازه می دهد بیش از یک کلاس پایه گرفته شود. این امر به روابط وراثت پیچیده تری اجازه می دهد. به عنوان مثال، یک کلاس "گربه پرواز" می تواند از هر دو "گربه" و "پرواز پستاندار" به ارث برسد. برخی از زبان های دیگر، مانند #C یا Java، با اجازه دادن به وراثت چندین رابط در حالی که تعداد کلاس های پایه را به یک محدود می کنند، چیزی مشابه (حتی محدودتر) را به دست می آورند. رابط کاربری موجود در سی شارپ و جاوا را می توان در ++C به عنوان کلاس تعریف کرد که فقط توابع مجازی خالص دارد، که اغلب به عنوان یک کلاس پایه انتزاعی یا "ABC" شناخته می شود. کارکردهای اعضای چنین کلاس پایه انتزاعی معمولاً در کلاس مشتق شده صریحاً تعریف می شوند، و به طور ضمنی به ارث نمی رسند.

اپراتورها و سربار اپراتورها

++C بیش از 35 اپراتور را در اختیار شما قرار می دهد، حساب های اساسی، دستکاری بیت، مقایسه، عملیات منطقی و سایر موارد را پوشش می دهد. تقریباً همه اپراتورها می توانند برای انواع تعریف شده توسط کاربر، بار اضافی داشته باشند. مجموعه غنی از اپراتورهای قابل بارگیری برای ساخت انواع تعریف شده توسط کاربر در ++C مانند انواع داخلی به نظر می رسد.

سربار اپراتورها نیز بخش اساسی بسیاری از تکنیک های پیشرفته برنامه نویسی ++C مانند نشانگرهای هوشمند است. بارگذاری بیش از حد یک اپراتور باعث تغییر در تقدم محاسبات مربوط به اپراتور نمی شود و همچنین تعداد عملوند هایی را که اپراتور از آن استفاده می کند، تغییر نمی دهد (هر عملیاتی ممکن است توسط اپراتور نادیده گرفته شود، اگرچه قبل از اجرا ارزیابی می شود). بارگیری "&&" و "||" اپراتورها ویژگی ارزیابی اتصال کوتاه خود را از دست می دهند.

پلی مورفیسم

پلی مورفیسم یک رابط مشترک را برای بسیاری از پیاده سازی ها و اشیاء متفاوت تحت شرایط مختلف ممکن می سازد. ++C از چند نوع استاتیک (حل شده در زمان کامپایل) و پویا (حل شده در زمان اجرا) پلی مورفیسم پشتیبانی می کند، که توسط ویژگی های زبان شرح داده شده در بالا پشتیبانی می شود. چند شکلی کامپایل زمان برای برخی از تصمیمات مربوط به زمان اجرا اجازه نمی دهد، در حالی که چند شکلی زمان اجرا به طور معمول مجازات عملکرد را متحمل می شود.

عبارات لامبدا

++C پشتیبانی از عملکردهای ناشناس، همچنین به عنوان عبارات لامبدا، با فرم زیر پشتیبانی می کند:

[capture](parameters) -> return_type { function_body }

نوع بازگشت یک عبارت lambda نیز می تواند به صورت خودکار استنباط شود، در صورت امکان، به عنوان مثال:

[](int x, int y) { return x + y; } // inferred
[](int x, int y) -> int { return x + y; } // explicit

لیست [capture] از تعریف بسته ها پشتیبانی می کند. عبارات لامبدا در استاندارد به عنوان شکر نحوی برای یک شی با تابع نامعین تعریف شده است.

مدیریت استثناء (Exception handling)

مدیریت استثناء برای برقراری ارتباط وجود مشکل یا خطای ران تایم از جایی که تشخیص داده شده تا جایی که می توان مسئله را کنترل کرد استفاده می شود. این کار اجازه می دهد تا ضمن شناسایی همه خطاها، به صورت یکنواخت و جدا از کد اصلی انجام شود. در صورت بروز خطا، یک استثناء مطرح می شود، که توسط نزدیکترین مدیریت استثناء گرفته می شود. استثنا باعث می شود دامنه فعلی خارج شود، و همچنین هر محدوده بیرونی (انتشار) تا زمانی که یک هندلر مناسب پیدا شود، به نوبه خود ناوشکن های همه اشیاء موجود در این محدوده ها را فرا می خواند. در همان زمان، یک استثناء به عنوان شیء حامل داده های مربوط به مشکل شناسایی شده ارائه می شود.

کد ایجاد کننده استثنا در بلوک try قرار می گیرد. استثنائات در بلوک های جداگانه catch (مدیریت کننده ها) کنترل می شوند. هر بلوک try می تواند دارای چندین استثناء باشد، همانطور که در مثال زیر قابل مشاهده است.

کتابخانه استاندارد سی پلاس پلاس (++C)

در زبان برنامه نویسی ++C، کتابخانه استاندارد ++C مجموعه ای از کلاس ها و توابع است که به زبان اصلی و بخشی از خود استاندارد C++ ISO نوشته شده است. کتابخانه استاندارد ++C چندین کانتینر عمومی، کارکردهایی برای استفاده و دستکاری این کانتینر، اشیاء عملکردی، رشته ها و جریان های عمومی (از جمله تعاملی و پرونده I / O)، پشتیبانی از برخی از ویژگی های زبان و کارکردهایی برای کارهای روزمره مانند یافتن مربع فراهم می کند. ریشه شماره کتابخانه استاندارد ++C همچنین 18 عنوان از کتابخانه استاندارد ISO C90 C را شامل می شود که با ".h" پایان می یابد، اما استفاده از آن ها بی ارزش می شود. هیچ عنوان دیگری در کتابخانه استاندارد ++C به ".h" ختم نمی شود. ویژگی های کتابخانه استاندارد ++C در فضای نام std اعلام شده است.

كتابخانه استاندارد ++C براساس كنوانسيون هاي ارائه شده توسط كتابخانه استاندارد الگو (STL) است و تحت تاثير تحقيقات در برنامه هاي عمومي و توسعه دهندگان STL قرار گرفته است. اگرچه کتابخانه استاندارد ++C و STL دارای بسیاری از ویژگی ها هستند، اما هیچ یک از برترین موارد دیگر نیست. ویژگی قابل توجه کتابخانه استاندارد ++C این است که نه تنها نحو و معناشناسی الگوریتم های عمومی را مشخص می کند بلکه الزامات عملکرد آنها را نیز مشخص می کند. الزامات تابع اغلب با یک الگوریتم شناخته شده مطابقت دارد، که انتظار می رود نیازی به استفاده از آن نباشد.

در بیشتر موارد، این نیاز به زمان خطی O (n) یا زمان خطی O (n log n) دارد، اما در برخی موارد، مرزهای بالاتر مجاز است، مانند زمان شبه خطی O (n log2 n) برای مرتب سازی پایدار (برای ورود به داخل محل ادغام) پیش از این، مرتب سازی فقط برای گرفتن میانگین O (n log n) لازم بود، استفاده از Quicksort که در عمل سریع است اما از بدترین حالت نیز برخوردار است، اما مرتب سازی مقدمه ای ارائه شده است تا هم عملکرد متوسط ​​سریع و هم بدترین وضعیت را بدست آورد. پیچیدگی در مقیاس کوچک و از C++ 11، مرتب سازی تضمین می شود که در بدترین حالت خطی باشد. در موارد دیگر، ملزومات ملایم تر مانند انتخاب، که فقط به طور متوسط ​​خطی هستند (مانند انتخاب سریع) لازم هستند و نیازی به خطی بدترین حالت ندارند. كتابخانه استاندارد ++C تحت عنوان استاندارد C++ ISO Standardization تحت استانداردسازي ISO قرار گرفت و در حال انجام كارهاي بيشتر در مورد استانداردسازي كاركردهاي توسعه يافته است.

برنامه نویسی استاندارد ++C به سه بخش مهم تقسیم می شود:

  • کتابخانه هسته (Core library) شامل انواع داده ها، متغیرها و ادبیات و غیره می باشد.
  • کتابخانه استاندارد (Standard library) شامل مجموعه ای از توابع دستکاری رشته ها، فایل ها و غیره می باشد.
  • کتابخانه استاندارد قالب (Standard Template Library) STL شامل مجموعه ای از روش های دستکاری ساختار داده می باشد.

تفاوت بین سی و سی پلاس پلاس

  • زبان سی، زبان برنامه نویسی ساخت یافته است اما سی پلاس پلاس زبان برنامه نویسی شیءگرا می باشد.
  • سی پلاس پلاس از شی گرایی پشتیبانی می کند اما سی پشتیبانی نمی کند.
  • زبان سی قدیمی تر از زبان سی پلاس پلاس است و امروزه کمتر از آن استفاده می شود.
  • در سی پلاس پلاس استفاده مجدد از Reusable Code میسر می باشد اما در سی این امکان وجود ندارد.
  • در زبان سی قابلیت های Virtual Function، Polymorphism، Operator Overloading وجود نداشت اما در سی پلاس پلاس وجود دارد.
  • انجام مبانی برنامه نویسی در سی از بالا به پایین است اما در سی پلاس پلاس طراحی برنامه از پایین به بالا صورت می پذیرد.
  • اتصال داده ها و توابع در سی امری سخت اما در ++C این فرآیند با استفاده از Object ها به راحتی صورت می گیرد.
  • در سی در هر تابعی می توانست تابع main را فراخوانی کنید اما در سی پلاس پلاس اینگونه نیست.
  • ارث بری تنها در سی پلاس پلاس قابل پیاده سازی است.
  • مدیریت خطاها در سی بسیار سخت تر از سی پلاس پلاس است.
  • ++C مخفی سازی داده ها را پشتیبانی می کند. بنابراین، داده ها توسط دنیای خارج قابل دسترسی نیستند اما سی مخفی کردن داده ها را پشتیبانی نمی کند.
  • ++C متغیرهای مرجع را پشتیبانی می کند اما C پشتیبانی نمی کند.

معرفی برنامه نویسی شی گرا (OOP)

برنامه نویسی شی گرا (OOP) یک الگوی برنامه نویسی مبتنی بر مفهوم "اشیاء" است. OOP، برنامه های رایانه ای با ساختن اشیایی که با یکدیگر در تعامل هستند، طراحی شده اند. زبان های OOP متنوع هستند، اما محبوب ترین آن ها مبتنی بر کلاس است، به این معنی که اشیاء نمونه هایی از کلاس ها هستند که نوع آنها را نیز تعیین می کنند. همچنین برنامه نویسی شی گرا پارادایم برنامه نویسی که یک برنامه کامپیوتری را به عنوان ترکیبی از ساختارهای داده (به نام آبجکت) که می تواند اطلاعات را به شیوه ای استاندارد مبادله کند و می تواند به عنوان ماژول ها یا بلوک ها ترکیب شود نشان می دهد. هر آبجکت مستقل است و می تواند بدون تأثیر بر بلوک های دیگر تغییر کند. همچنین می تواند خودش اجرا شود و می تواند به آبجکت های دیگر متصل شود. آبجکت ها با انتقال اطلاعات بین یکدیگر تعامل دارند و هر آبجکت شامل اطلاعاتی درباره خود و آن دسته از آبجکت هایی است که می تواند با آنها تعامل داشته باشد.

Object-oriented programming به اختصار OOP، یک مدل زبان برنامه نویسی است که آبجکت ها به جای action و داده ها به جای منطق سازماندهی شده است. از لحاظ تاریخی، یک برنامه به عنوان یک روش منطقی مورد توجه قرار گرفته است که داده ورودی را دریافت می کند، پردازش می کند و داده های خروجی را تولید می کند. اولین گام در OOP این است که تمام آبجکت هایی که برنامه نویسان می خواهند دستکاری کنند و نحوه ی ارتباط آنها با یکدیگر را شناسایی کنند. این امر اغلب به عنوان مدل سازی داده شناخته می شود. هنگامی که یک آبجکت شناسایی می شود، به عنوان یک کلاس از آبجکت ها تعریف می شود که نوع داده ای که در آن وجود دارد و هر توالی منطقی که می تواند آن را دستکاری کند تعریف می کند. هر توالی منطقی مختلف به عنوان یک متد شناخته می شود. آبجکت ها با رابط های تعریف شده به نام پیام ها ارتباط برقرار می کنند.


کاربرد سی پلاس پلاس (++C)

آموزش جامع سی پلاس پلاس

استفاده از ++C برای توسعه بسیاری از برنامه های کاربردی مبتنی بر این زبان فقط به دلیل ویژگی ها و امنیت آن، مزایای بسیاری دارد. لطفاً بخشهای زیر را پیدا کنید، جایی که کاربردهای ++C به طور گسترده و مؤثر مورد استفاده قرار گرفته است. در زیر لیست 10 کاربرد برتر ++C قرار دارد.

برنامه های کاربردی

برای توسعه برنامه های جدید ++C استفاده می شود. برنامه های کاربردی مبتنی بر رابط کاربری گرافیکی، که از برنامه های بسیار پر کاربردی مانند فتوشاپ و سایر موارد استفاده می کنند. بسیاری از برنامه های سیستم های Adobe در ++C مانند ایلوستریتور، پریمیر و آماده تصویر ساخته شده اند و توسعه دهندگان Adobe در جامعه ++C فعال به حساب می آیند.

بازی ها

این زبان برای توسعه بازی ها نیز استفاده می شود. این پیچیدگی بازی های سه بعدی را نادیده می گیرد. این به بهینه سازی منابع کمک می کند. این گزینه از بازی چند نفره با شبکه پشتیبانی می کند. استفاده از ++C به برنامه نویسی رویه ای برای عملکردهای فشرده CPU و کنترل سخت افزار اجازه می دهد و این زبان خیلی سریع انجام می شود، به همین دلیل در توسعه بازی های مختلف یا در موتورهای بازی بسیار مورد استفاده قرار می گیرد. ++C عمدتا در ساخت مجموعه های یک ابزار بازی استفاده می شود.

انیمیشن

یک نرم افزار انیمیشن وجود دارد که با کمک زبان ++C ساخته شده است. از نرم افزارهای انیمیشن سه بعدی، مدل سازی، شبیه سازی، رندر به عنوان ابزار قدرتمند یاد می شود. از آن برای ساختن زمان واقعی، پردازش تصویر، برنامه های حسگر موبایل و جلوه های بصری استفاده می شود، مدل سازی که عمدتاً در ++C کدگذاری شده است. این نرم افزار توسعه یافته برای انیمیشن، محیط، موشن گرافیک، واقعیت مجازی و خلق شخصیت استفاده شده است.

توسعه مرورگر وب

این زبان برای توسعه مرورگرها نیز استفاده می شود. برای ساخت Google Chrome و مرورگر اینترنت Mozilla Firefox استفاده می شود. برخی از برنامه ها با زبان ++C نوشته شده اند، که مرورگر Chrome یکی از آنهاست و برخی دیگر مانند یک سیستم پرونده هستند، نقشه پردازش داده های خوشه ای بزرگ را کاهش می دهد. Mozilla برنامه دیگری نیز دارد که در ++C نوشته شده است که مشتری ایمیل Mozilla Thunderbird است. ++C همچنین موتور ارائه دهنده پروژه های اوپن سورس گوگل و موزیلا است.

دسترسی به بانک اطلاعاتی

این زبان برای توسعه نرم افزار پایگاه داده یا نرم افزار اوپن سورس نیز استفاده می شود. مثال برای این MySQL است که یکی از محبوب ترین نرم افزارهای مدیریت پایگاه داده است و به طور گسترده در سازمان ها یا در میان توسعه دهندگان مورد استفاده قرار می گیرد. این در صرفه جویی در وقت، پول سیستم های تجاری و نرم افزارهای بسته بندی شده کمک می کند. برنامه های کاربردی دیگر مبتنی بر دسترسی به نرم افزار پایگاه داده وجود دارد که از ویکی پدیا، یاهو، یوتیوب و غیره استفاده می کنند. مثال دیگر Bloomberg RDBMS است که به ارائه اطلاعات مالی در زمان واقعی به سرمایه گذاران کمک می کند. این مقاله عمدتا با زبان ++C نوشته شده است و این باعث می شود دسترسی سریع یا دقیق به اطلاعات برای ارائه اطلاعات مربوط به تجارت و امور مالی، اخبار در سراسر جهان انجام شود.

رسانه

همچنین برای ایجاد یک دستگاه پخش رسانه ای، مدیریت فایل های ویدئویی و فایل های صوتی استفاده می شود. مثال، پخش کننده Winamp Media است که به زبان ++C ساخته شده است و به ما امکان می دهد از موسیقی، دسترسی و اشتراک گذاری فیلم ها و فایل های موسیقی لذت ببریم. همچنین دارای امکاناتی مانند پشتیبانی هنری، پخش صوتی و تصویری است. همچنین امکان دسترسی به ایستگاه های رادیویی اینترنتی را فراهم می کند.

کامپایلرها

بیشتر کامپایلرها که عمدتا فقط به زبان ++C نوشته شده اند. کامپایلرهایی که برای گردآوری زبانهای دیگر مانند #C، جاوا و غیره استفاده می شوند که عمدتا فقط در ++C نوشته شده اند. همچنین در توسعه این زبان ها نیز مورد استفاده قرار می گیرد و همچنین ++C مستقل از پلتفرم است و قادر به ایجاد انواع نرم افزار است.

سیستم عامل

همچنین برای توسعه بیشتر سیستم عامل ها برای مایکروسافت و چند قسمت از سیستم عامل اپل نیز استفاده می شود. مایکروسافت ویندوز 95، 98، 2000، XP، اینترنت اکسپلورر و ویژوال استودیو، سیستم عامل های تلفن همراه Symbian عمدتاً فقط به زبان ++C نوشته شده اند.

اسکن

برنامه هایی مانند اسکنر فیلم یا اسکنر دوربین نیز به زبان ++C توسعه یافته اند. برای توسعه فن آوری PDF برای اسناد چاپ، تبادل اسناد، بایگانی اسناد و انتشار اسناد نیز استفاده شده است.

سایر موارد استفاده

از آن برای کاربردهای پزشکی و مهندسی، سیستم های طراحی به کمک رایانه استفاده می شود. این برنامه ها مانند دستگاه های اسکن MRI، سیستم های CAM است که عمدتا در بیمارستان ها و سایر بخش های ساخت و معدن و غیره مورد استفاده قرار می گیرد. برنامه های ++C به عنوان اولین زبان ترجیحی که در هنگام عملکرد در بین توسعه دهندگان، در نظر گرفته می شود.


      فریمورک های سی پلاس پلاس (++C)

      کیوت (QT)

      Qt برای توسعه واسط های گرافیکی کاربر (GUI) و برنامه های چند پلتفرمی که در تمام سیستم عامل های دسکتاپ اصلی و اکثر سیستم عامل های موبایل یا جاسازی شده اجرا می شوند، استفاده می شود. بیشتر برنامه های رابط کاربری گرافیکی ایجاد شده با Qt دارای یک رابط نیتیو هستند که در این حالت Qt به عنوان ابزار ابزارک طبقه بندی می شود. همچنین، می توان برنامه های غیر GUI مانند ابزار خط فرمان و کنسول برای سرورها توسعه داد. نمونه ای از چنین برنامه غیر GUI با استفاده از Qt فریمورک وب Cutelyst است.

      Qt از کامپایلرهای مختلفی از جمله کامپایلر++GCC C و مجموعه ویژوال استودیو پشتیبانی می کند و از پشتیبانی بین المللی گسترده ای برخوردار است. Qt همچنین Qt Quick را ارائه می دهد، که شامل یک زبان برنامه نویسی اعلانی به نام QML است که با استفاده از جاوااسکریپت امکان ارائه منطق را فراهم می کند. با استفاده از Qt Quick، توسعه سریع برنامه برای دستگاه های تلفن همراه امکان پذیر شد، در حالی که منطق را می توان برای دستیابی به بهترین عملکرد ممکن، با کد نیتیو نیز نوشت. سایر ویژگی ها شامل دسترسی به پایگاه داده اس کیوال (SQL)، تجزیه و تحلیل اکس ام ال (XML)، تجزیه جی سان (JSON)، مدیریت موضوعات و پشتیبانی شبکه است.

      wxWidgets

      wxWidgets یک ابزار و کتابخانه ابزار برای ایجاد رابط های کاربر گرافیکی (GUI) برای برنامه های cross-platform است. wxWidgets کد GUI برنامه را قادر می سازد در چندین سیستم عامل رایانه ای با حداقل تغییر یا بدون تغییر کد کامپایل و اجرا شود. انتخاب گسترده ای از کامپایلرها و ابزارهای دیگر برای استفاده با wxWidgets توسعه برنامه های پیشرفته را تسهیل می کند. wxWidgets از طیف گسترده ای از سیستم عامل های محبوب و کتابخانه های گرافیکی، اختصاصی و رایگان پشتیبانی می کند و به طور گسترده در سازمان های برجسته مستقر می شود. این نرم افزار رایگان و اپن سورس است، با توجه به مجوز wxWidgets، توزیع شده است، و کسانی که مایل به تولید برای GPL و نرم افزار اختصاصی هستند، راضی می کند.


      مثال های سی پلاس پلاس (++C)

      برای نوشتن اولین برنامه ++C، کنسول ++C را باز کرده و کد زیر را بنویسید:

      #include <iostream.h>  
      #include<conio.h>  
      void main () {  
         clrscr();  
         cout << "Welcome to ++C Programming.";   
         getch();  
      }  
      

      #include <iostream.h>

      شامل توابع کتابخانه استاندارد ورودی و خروجی است و متدهای cin و cout را برای خواندن از ورودی و نوشتن در خروجی به ترتیب فراهم می کند.

      #include <conio.h>

      شامل توابع کتابخانه ورودی و خروجی کنسول است. تابع getch در فایل conio.h تعریف شده است.

      void main ()

      تابع main نقطه ورودی هر برنامه در زبان ++C است. کلمه کلیدی void مشخص می کند که هیچ مقدار بازگشت نمی دهد و خروجی ندارد.

      cout << 'Welcome to ++C Programming'

      دستور cout برای ارسال یک عبارت یا متغییر به خروجی کنسول استفاده می شود. در اینجا عبارت Welcome to C++ Programming در خروجی چاپ می شود.

      getch ()

      این تابع یک تک کاراکتر را درخواست می کند. تا زمانی که کلیدی را فشار دهید، صفحه را مسدود می کند.

        نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود