حسابداری : اموزش کار با انواع نرم افزار ها طراحی وب سایت و مشاوره خرید هاست و دامین گرافیک : طراحی و چاپ انواع کارت ویزیت ، لوگو و ... آموزش کار با نرم افزار فتوشاپ تعویض و ارتقاع سیستم
ما در گروه خود انجام تمامی امور برنامه نویسی از جمله کار با c++ ، جاوا ، ruby ، html ،bash ، git ، svn ، و … انجام میدهیم آموزش کار با انواع کد
نویسی ها و آموزش راه های مختلف دور زدن قوانین برنامه نویسی ( به
++C (بخوانید سی پلاسپلاس) یک زبان
برنامهنویسی رایانهای همهمنظوره،همگردان، سطح میانی، شیءگرا و چندرگه
(که از برنامهنویسی رویهای، تجرید دادهها و برنامهنویسی شیءگرا پشتیبانی میکند)، عمومی و با
قابلیتهای سطح بالا و سطح پایین میباشد. این زبان دارای قابلیتهای انواع
داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از
برنامهنویسی ساختیافته، برنامهنویسی شیءگرا، برنامهنویسی جنریک است.
از آنجا که در سی++ اشیاء را میتوان ابتدا به ساکن از کلاسهایی ایجاد کرد
که به هیچگونه سلسله مراتب ردهها و وراثت مقید نیستند، لذا سی++ از
برنامهسازی شیء بنیاد (object-based programming) نیز پشتیبانی میکند.
++C به همراه جد خود C از پرطرفدارترین زبانهای برنامهنویسی تجاری هستند. ++C یک زبان سطح میانی در نظر گرفته میشود؛ این زبان دارای قابلیت زبانهای سطح بالا و پایین بهصورت همزمان است. ++C توسط بییارنه استراستروپ ریاضیدان
دانمارکی در سال ۱۹۷۹ در آزمایشگاههای بل (Bell Labs)، برای بهبود زبان
سی و بر مبنای آن ساخته شد و آن را «C با کلاس» (C With Classes) نامگذاری
نمود. در سال ۱۹۸۳ به ++C تغییر نام داد. توسعه با اضافه نمودن کلاسها و
ویژگیهای دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه،
قالب توابع، و پردازش استثناء انجام شد. این زبان برنامهنویسی در سال ۱۹۹۸
تحت نام ISO/IEC ۱۴۸۸۲:۱۹۹۸ استاندارد شد. نسخهٔ فعلی استاندارد این زبان
ISO/IEC ۱۴۸۸۲:۲۰۱۴ است. تاریخچهٔ زبان استراستروپ کار بر روی زبان «C دارای کلاس»
را در سال ۱۹۷۹ آغاز کرد. ایدهٔ ساخت این زبان جدید در زمان کار بر روی تز
دکترای خود به ذهن استراستروپ خطور نمود. او متوجه شد که سیمولا دارای
ویژگیهایی مناسب برای ساخت برنامههای بسیار بزرگ است اما برای استفادهٔ
عملی بسیار کند است اما بیسیپیال با وجود سرعت بسیار زیاد برای ساخت
برنامههای بزرگ بسیار سطح پایین است. زمانی که استراستروپ کار خود را در
آزمایشگاههای بل (Bell Labs) آغاز نمود با مشکل تحلیل هسته یونیکس با توجه
به محاسبات توزیع شده روبرو شده بود. با یادآوری تجربیات خود در دوران
دکترا، او زبان C را با استفاده از ویژگیهای سیمولا گسترش داد. C به این
دلیل انتخاب شد که یک زبان عمومی، سریع، قابل حمل، و در سطح گستردهای در
حال استفاده بود. علاوه بر C و سیمولا زبانهای دیگری مانند ALGOL ۶۸، ADA,
CLU, ML نیز بر ساختار این زبان جدید اثر گذاشت. در ابتدا ویژگیهای کلاس،
کلاسهای مشتق شده، کنترل نوع قوی، توابع درونخطی و آرگومانهای پیشفرض
از طریق Cfront به C اضافه شد. اولین نسخهٔ تجاری در سال ۱۹۸۵ ارائه شد. در سال ۱۹۸۳ نام زبان از «C با کلاس» به
++C تغییر یافت. ویژگیهای دیگر شامل توابع مجازی، سربارگزاری عملگر و نام
تابع، ارجاعات، ثوابت، کنترل حافظه توسط کاربر بهصورت آزاد، کنترل نوع
بهتر، و توضیحات یکخطی به صورت BCPL با استفاده از «//» نیز به آن اضافه
شد. در سال ۱۹۸۵ اولین نسخه زبان برنامهنویسی ++C انتشار یافت و مرجع مهمی
برای این زبان فراهم شد در حالی که هیچ استاندارد رسمیای وجود نداشت. در
سال ۱۹۸۹ ویرایش ۲٫۰ از زبان ++C ارائه شد. ویژگیهای جدیدی مانند ارثبری
چندگانه، کلاسهای انتزاعی، اعضای ایستای توایع، اعضای ثابت تابع، و اعضای
حفاظت شده به آن اضافه شد. در سال ۱۹۹۰ «راهنمای مرجع ++C» منتشر شد. این
کار بنیان استانداردهای بعدی شد. آخرین ویژگیهای اضافه شده شامل موارد زیر
بودند: قالب توابع، استثناها، فضاهای نام، تبدیلات جدید، و یک نوع داده
منطقی. در حین تکامل ++C کتابخانهٔ استاندارد
نیز بهوجود آمد. اولین نسخهٔ کتاب استاندارد شامل کتابخانهٔ جریانات I/O
بود که جایگزین printf و scanf شد. در ادامه مهمترین ویژگی اضافه شده
Standard Template Library بودهاست. استاندارد زبان استاندارد سازی سی++ توسط یک گروه از
تشکیلات ISO انجام میشود.[۴] تاکنون ۶ نسخه از استاندارد این زبان منتشر
شدهاست؛ و استاندارد C++20 نیز برای انتشار در سال ۲۰۲۰ برنامهریزی
شدهاست. در سال ۱۹۹۸ برای اولین بار پس از سالها
کار کمیته مشترک ANSI–ISO این زبان تحت عنوان ISO/IEC 14882:1998 و نام
غیررسمی C++98 استاندارد سازی شد. بعدها در سال ۲۰۰۳ نسخه جدیدی از
استاندارد یعنی ISO/IEC 14882:2003 انتشار یافت و برخی از مشکلات و باگهای
C++98 در آن رفع شد. در سال ۲۰۰۵ یک گزارش فنی به اسم «گزارش
فنی کتابخانهٔ ۱» (که معمولاً بصورت اختصار TR۱ خوانده میشود) منتشر شد
که مواردی جدید را برای اضافه کردن به کتابخانه استاندارد دربرداشت با این
که این گزارش قسمتی از استاندارد نبود ولی بعدها در نسخه بعدی استاندارد
یعنی C++11 اضافه شد. نسخه بعدی با نام غیررسمی C++11 و
استاندارد ISO/IEC 14882:2011 در تاریخ ۱۲ اوت ۲۰۱۱ مورد تأیید سازمان
بینالمللی استانداردسازی قرار گرفت و جایگزین C++03 شد. در سال ۲۰۱۴ نسخه ای دیگر از این زبان
در تاریخ ۱۸ اوت ۲۰۱۴ با نام غیررسمی C++14 و استاندارد ISO/IEC 14882:2014
منتشر شد. هدف اصلی C++14 همانند C++03 رفع مشکلات و همچنین اضافه کردن
ویژگیها و بهبود جزیی C++11 بودهاست. انتشار نسخه بعدی استاندارد این زبان با
نام C++1z در سال ۲۰۱۷ بود که توسط کمیته ++ISO C در اواسط ماه جولای
تولید شد و در ماه دسامبر تأیید و منتشر شد. انتظار میرود نسخه آینده نیز در سال ۲۰۲۰ بهطور رسمی منتشر شود در حالی که ++C به هیچ مؤسسهای وابسته
نیست این مستندات بهصورت آزادانه در دسترس نیستند. گرچه نسخههای نهایی
نشده(draft) این اسناد در دسترس همگان قرار میگیرد. نام ++C این نام منسوب به ریک ماسکیتی (اواسط ۱۹۸۳)
است و برای اولین بار در دسامبر سال ۱۹۸۳ به کار برده شد. در طول مدت تحقیق
این زبان بنام «C جدید» و بعدها «C با کلاس» خوانده شد. در علوم کامپیوتر
هنوز هم ++C به عنوان ابرساختار C شناخته میشود. آخرین نام از عملگر ++ در
زبان C (که برای افزایش مقدار متغیر به اندازهٔ یک واحد بکار میرود) و یک
عرف معمول برای نشان دادن افزایش قابلیتها توسط + ناشی گشتهاست. با توجه
به نقل قولی از استراستروپ: «این نام ویژگیها تکاملی زبان در C را نشان
میدهد.» +C نام زبانی غیرمرتبط به این زبان است. استراستروپ مبدأ این نام را در فصل اول
کتاب خود «زبان برنامهنویسی ++C» اشاره مینماید که معنی دیگر ++C را
میتوان در ضمائم کتاب جرج ارول بنام ۱۹۸۴ یافت. در سه قسمت از زبان تخیلی
Newspeak «کلمات C» برای اشاره به لغات فنی و حرفهای بکار میرود. «دو
علامت +» برای ایجاد صفات عالی از صفات Newspeak به کار میرفت بنابراین
++C به معنای زبانی با بیشترین شباهت به C است. وقتی که به صورت خصوصی از ریک ماسکیتی
در مورد این اسم سؤال شد او در جواب گفت که این اسم بصورت خودمانی در بین
آنها به کار میرفتهاست و تصور نمیکردند که این نام بصورت نام رسمی این
زبان درآید. فلسفه در کتاب «طراحی و تکامل ++C» استراستروپ
قوانین مورد استفاده در طراحی ++C را بیان مینماید. دانستن این قوانین به
فهمیدن نحوه عملکرد ++C و چرایی آن کمک میکند. جزئیات بیشتر در کتاب قابل
دسترسی است: ++C طراحی شدهاست تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد. ++C طراحی شدهاست تا مستقیماً و بصورت جامع
از چندین شیوه برنامهنویسی بتوان از آن استفاده کرد (برنامهنویسی
ساختیافته، برنامهنویسی شیگرا، انتزاع داده، و برنامهنویسی جنریک). ++C طراحی شدهاست تا به برنامهنویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد. ++C طراحی شدهاست تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد. ++C از بکاربردن ویژگیهای خاص که مانع از عمومی شدن است خودداری مینماید. ++C از ویژگیهایی که بکار برده نمیشوند استفاده نمیکند. ++C طراحی شدهاست تا بدون یک محیط پیچیده عمل نماید. ویژگیهای معرفی شده در ++C در مقایسه با C زبان ++C ویژگیهای جدیدی را
معرفی نمودهاست مانند تعریف متغیر به عنوان عبارت، تغییر نوعهای همانند
تابع، نو/حذف، نوع داده bool، توابع درونخطی، آرگومان پیشفرض، گرانبارسازی
عملگر و تابع، فضای نام و عملگر تعیین حوزه ::، کلاسها (شامل تمام
ویژگیهای مربوط به کلاسها همانند وراثت، اعضای تابع، توابع مجازی،
کلاسهای انتزاعی، و سازندهها)، قالبها، پردازش استثناء، کنترل نوع زمان
اجرا، عملگرهای سربار شده ورودی (<<) و خروجی (>>). برخلاف باور عموم ++C نوع داده ثابت را
معرفی ننمودهاست. کلمه const کمی پیش از استفاده از این کلمه در ++C توسط
زبان C بصورت رسمی بکار گرفته شد. در بعضی حالات ++C تعداد کنترل نوع بیشتری
نسبت به زبان C انجام میدهد. (برای اطلاعات بیشتر بخش «ناهماهنگی با C» را
در پایین ببینید) توضیحات با استفاده از // قبل از زبان C در زبان BCPL معرفی شده بود که مجدداً در زبان ++C به کار گرفته شد. بعضی ویژگیهای ++C بعداً توسط C به کار
گرفته شد مانند نحوه تعریف for، توضیحات به شکل ++C (با استفاده از //)، و
کلمه inline با وجود اینکه تعریف این کلمه در C با تعریف آن در زبان ++C
هماهنگی ندارد. همچنین در C ویژگیهایی معرفی شدهاست که در ++C وجود
ندارند مانند ماکروهای قابل تغییر و استفاده بهتر از آرایهها به عنوان
آرگومان. بعضی کامپایلرها این ویژگیها را پیاده نمودهاند اما در بقیه این
ویژگیها موجب ناهماهنگی میگردد. پیش پردازنده ++C بطور عمومی در سه فاز ترجمه میگردد:
پیشپردازنده، ترجمه به کد object، پیوند (که دو مرحله آخر به عنوان عمل
کامپایل شناخته میشود) در اولین مرحله در پیشپردازنده، شبهدستورات
پیشپردازنده تغییرات لغوی بر روی کد منبع ایجاد مینمایند و آن را به
مراحل دیگر تحویل میدهند. شبه دستورات پیشپردازنده با استفاده از
کاراکتر # قبل از هر گونه فضای خالی آغاز گشته و رشتههایی را در کد منبع
با فایل یا رشتههای دیگر با توجه به قوانین تعریف گشته توسط برنامهنویس
جایگزین مینماید. این دستورات معمولاً اعمال زیر را انجام میدهند:
جایگزینی ماکروها، شمول فایلهای دیگر (برخلاف ویژگی سطح بالاتر مانند شمول
ماجولها/پکیجها/یونیتها/کامپوننتها)، کامپایل شرطی و/یا شمول شرطی. به
عنوان اشیاء سی++ چندین ویژگی شیگرا را زبان سی معرفی
نمود معرفی کلاس چهار ویژگی که در زبانهای شیگرا و بعضاً غیر شیگرا حضور
دارد یعنی انتزاع، بستهبندی، وراثت، و چندریختی را فراهم کرد. اشیاء
نمونههای ساخته شده از کلاس در زمان اجرا هستند. میتوان کلاس را نمونهای
از قالبها دانست که چندین مورد از آنها بوجود میآید. بستهبندی بستهبندی به معنای جمعآوری عملیات و داده
در یک محل میباشد. سی++ بستهبندی را با ایجاد امکان تعریف هر کلاس به
صورت public, private, protected پیادهسازی نمودهاست. اعضای private فقط
توسط اعضای کلاس یا کلاسها دقیقاً بیان شده (friend) قابل دسترسی هستند.
اعضای protected توسط کلاسهای ارث برده شده و اعضای کلاس و کلاسهای
friend قابل دسترسی هستند. در تعاریف شیگرا باید تنها توابعی
بستهبندی گردند که باید از نحوه پیادهسازی این نوع بخصوص اطلاع داشته
باشد. سی++ این ویژگی را با استفاده از توابع عضو و توابع دوست فراهم نموده
اما قطعی نکردهاست. در سی++ این امکان وجود دارد که تمام نوع را عمومی
تعریف نمایند اما در صورتی که نیاز باشد فقط بخشی از آن عمومی گردد در
نتیجه این زبان نه تنها شیگرا است بلکه از مدلهای ضعیفتر همانند
برنامهنویسی مدولار پشتیبانی مینماید. عموماً توصیه بر این است که تمام اعضا به
صورت خصوصی یا حفاظت شده تبدیل گردند و فقط توابعی که باید توسط دیگر
کلاسها به عنوان واسط استفاده شوند عمومی باقی بمانند. وراثت وراثت این امکان را ایجاد میکند که یک نوع
ویژگی دیگر انواع را داشته باشد. وراثت از یک کلاس پایه میتواند عمومی،
خصوصی یا حفاظت شده باشد. این تعیین سطح دسترسی مشخص میسازد آیا کلاسهای
نامربوط یا مشتق شده میتوانند به اعضای عمومی یا حفاظت شده کلاس پایه
دسترسی داشته باشند. تنها وراثت عمومی به معنای وراثت به کار رفته بصورت
عموم است. دو نوع دیگر وراثت به ندرت مورد استفاده قرار میگیرند. اگر
تعیینکننده سطح دسترسی حذف شود سطح دسترسی برای کلاس خصوصی و برای ساختمان
به صورت عمومی تعریف میگردد. کلاسهای پایه ممکن است بصورت مجازی تعریف
شوند که به آن وراثت مجازی گویند. وراثت مجازی تضمین میکند که فقط یک
نمونه از کلاس پایه وجود داشته باشد و مشکلاتی همانند مشکلات وراثت چندگانه
بوجود نیاید. وراثت چندگانه یکی از ویژگیهای مورد
بحث در سی++ است. وراثت چندگانه امکان اشتقاق از چند کلاس پایه را فراهم
مینماید که موجب بوجود آمدن گراف رابطه وراثت بسیار پیچیدهاست. به عنوان
مثال «گربه پرنده» میتواند از کلاس «گربه» و کلاس «پستانداران پرنده» ارث
برد. در زبانهای دیگر مانند سیشارپ و جاوا به صورت دیگری ویژگی مشابه را
پیادهسازی مینماید هر کلاس میتواند از چندین واسط اشتقاق یابد اما فقط
یک کلاس پایه برای اشتقاق وجود دارد (واسطها برخلاف کلاس پایه فقط تعریف
هستند و هیچگونه پیادهسازی را شامل نمیگردند). چندریختی امکان استفاده از یک واسط برای چندین پیادهسازی فراهم مینماید و اشیاء در شرایط مختلف رفتار مختلفی از خود نشان میدهند. سی++ دو نوع چندریختی در اختیار برنامهنویس
قرار میدهد: چندریختی زمان کامپایل و چندریختی زمان اجرا. چندریختی زمان
کامپایل امکان تصمیمگیریهای زمان اجرا را فراهم نمیسازد و چندریختی زمان
اجرا اغلب موجب پایین آمدن بازدهی میگردد. چندریختی ایستا چندریختی ایستا شامل گرانبارسازی تابع، گرانبارسازی عملگر، آرگومان پیشفرض، و قالب کلاسها و تابع است. چندریختی پویا چندریختی پویا شامل وراثت و توابع مجازی عضو است. گرانبارسازی تابع گرانبارسازی تابع امکان تعریف چندین تابع با
نام یکسان اما با تعداد آرگومانهای متفاوت را فراهم میسازد. این توابع
از طریق تعداد پارامترها یا نوع رسمی آنها شناسایی میگردند. در نتیجه یک
تابع ممکن است با توجه به موقعیت استفاده معنای مختلفی داشته باشد. نوع
داده برگشتی برای تشخیص توابع از یکدیگر مورد استفاده قرار نمیگیرد. گرانبارسازی عملگر بطور مشابه گرانبارسازی عملگر امکان استفاده
از یک عملگر مشخص میشود که عملکرد متفاوتی با توجه به عملوندهای خود
دارد. این عملگرهای گرانبار شده موجب فراخوانی تابع مشخصی متناسب با آن
موقعیت میگردند. گرانبارسازی عملگر ترتیب اجرا یا تعداد عملوندهای یک
عملگر را تغییر نمیدهد. عملگرهای . :: .* ? نمیتوانند گرانبار شوند. ساختار برنامهها ساختار برنامهها در این زبان بدین صورت است
که همانند زبان سی، هر برنامه بایستی یک تابع اصلی (main) به عنوان بدنه
برنامه داشته باشد. هر برنامه معمولاً از تعداد زیادی فایل تشکیل میشود که
به هم الحاق میگردند (با دستور include) و به این فایلهای الحاقی،
سرآیند (Header) گفته میشود. فایلهای الحاقی حاوی کدها یا نسخههای
اجرایی کلاسها (مجموعه متغیرها و توابع) میباشند که در بدنه اصلی برنامه
از آنها استفاده میشود. معمولاً هر کلاس (که تعریف یک نوع دادهای با
متدهای مربوط به آن است) را در یک سرآیند مینویسند. هر سرآیند که معمولاً
تنها تعاریف (معرفی) کلاس را در خود دارد به همراه فایلهای پیادهسازی به
زبان ++C یا پیادهسازیهای کامپایل شده (به صورت فایل اشیاء مانند dll یا
so یا …) میتواند به کار برده شود. به مجموعههای یکپارچهای از کلاسهای
پیادهسازی شده (به صورت فایلهای سرآیند با پیادهسازیهای کد یا اشیای
زبان ماشین) که برای برنامهنویسی به کار میروند، یک کتابخانه ++C گفته
میشود و قدرت اصلی این زبان در امکان بهکارگیری کتابخانههای آماده
میباشد. کتابخانههای بزرگ ++C مانند STL, MFC, QT و … مجموعه قدرتمندی
برای تولید برنامه در این زبان ایجاد کردهاند. تست کد ++C برای تست برنامههای نوشته شده با زبان ++C
روشهای مختلفی وجود دارد، برخی از ویرایشگرهای مانند visual studio ابزاری
برای این منظور دارند ولی برای تست دقیق تر بهتر است از ابزارهای با دقت
بالا استفاده کرد، بهینهسازی کد و بالا بردن کارایی از مزیتهای تست کد
است. C/C++Test راهکاری یکپارچه برای خودکارسازی محدوده وسیعی از شیوههای
تضمین کیفیت برنامههای تولید شده با زبانهای C و ++C میباشد. C/C++Test
قابلیت تولید تست واحد (unit test) و تحلیل سورس-کد (static analysis) تحت
زبان ++C را داراست. این ابزار امکان خودکارسازی تستهای برنامهنویسی را
همراه با اندازهگیری میزان پوشش کد (code coverage) فراهم میسازد. همچنین
کیفیت سورس-کد را از ابعاد مختلف کارکردی، کارایی، امنیت و نگهداشت تحلیل
میکند. امکان یکپارچه سازی با ابزار SAOTest جهت انجام تست کارکردی و
ابزار LoadTest جهت انجام تست کارایی در سطح ماجولهای برنامهنویسی را نیز
داراست. http://matingeernig.ir