آموزش ++C – مجموعه مقالات مجله فرادرس


++C یک زبان چندمنظوره برنامهنویسی است که از سوی «بیارنه استروستروپ» (Bjarne Stroustrup) در سال 1985 میلادی ابداع شده است. این زبان برای رفع نواقص زبان C طراحی شد و از این رو نام آن ++C به معنای زبان C ارتقا یافته است. زبان ++C در طی زمان توسعه زیادی یافته است و اینک از قابلیتهای شیءگرایی، ژنریک و ویژگیهای تابعی برخوردار است و همچنین امکان دستکاری سطح پایین حافظه را فراهم ساخته است. این زبان تقریباً همواره به صورت یک زبان کامپایل شونده پیادهسازی شده است و کامپایلرهای زیادی برای آن ارائه شده است. در این نوشته به جمعبندی مجموعه مقالات آموزش ++C مجله فرادرس میپردازیم.
این زبان نخستین بار در سال 1998 از سوی کمیته ISO استاندارد شده است. همچنین نسخههای بعدی استاندارد آن شامل نسخه 14++C++03 ،C++11 ،C و 17++C هستند. نسخه بعدی آن نیز 20++C است که سنت انتشار هر سه سال یک بار نسخههای جدید را رعایت میکند.
زبان ++C دو مؤلفه اساسی دارد که یکی نگاشت مستقیم سختافزاری است که آن را از زبان C به ارث برده است. ویژگی دوم ++C این است که تجرید بدون سرباری روی آن نگاشتها ارائه میکند. استروستروپ ++C را به عنوان «یک زبان برنامهنویسی تجریدی سبک که برای ساخت و استفاده از تجریدهای کارآمد و برتر طراحی شده است» توصیف میکند. در واقع آن چه موجب شده ++C از زبانهای دیگر برنامهنویسی متمایز شود، همین داشتن همزمان ویژگیهای دسترسی سختافزاری و تجرید است.
توجه کنید که نام این زبان برنامهنویسی به صورت «سی پلاس پلاس» (C plus plus) تلفظ میشود. ما در مجله فرادرس در طی ماههای اخیر یک سری مقالات آموزشی ارائه کردهایم که عمده مباحث مرتبط با این زبان برنامهنویسی را پوشش میدهد. در ادامه فهرستی از این مقالات را ذیل حوزه موضوعی مرتبط به همراه توضیح کوتاهی مشاهده میکنید. پیشنهاد میکنیم این مقالات را به ترتیب ارائه پیگیری کنید.
در این مقاله در خصوص مباحث کلی مرتبط با زبان برنامهنویسی ++C صحبت کردهایم. ابتدا ماهیت آن را تعریف کرده و شمهای از تاریخچه آن ارائه کردهایم. همچنین قابلیتهای آن و مزیتهای این زبان را مورد بررسی قرار دادهایم. در نهایت روش کدنویسی و کامپایل این زبان را روی سیستم معرفی کرده و یک برنامه نمونه نیز ارائه کردهایم.
کنترل گردش در زبان ++C
- در این حوزه 6 مقاله ارائه شده است که به طور عمده بر روی ساختارهای کنترلی این زبان برنامهنویسی متمرکز هستند.
- گزارههای شرطی ساده و تودرتو در ++C — به زبان ساده
در این مقاله، با روش نوشتن گزارههای شرطی ساده و تودرتو در ++C به کمک عبارتهای مختلف if…else آشنا میشویم. این گزاره یکی از مهمترین ابزارها در هر زبان برنامهنویسی محسوب میشود. گزاره if به ارزیابی عبارت تست درون پرانتز میپردازد. اگر عبارت تست، درست ارزیابی شود، گزارههای درون بدنه if اجرا میشوند. اگر عبارت تست نادرست ارزیابی شود، گزارههای درون بدنه if رد میشوند.
در زبانهای برنامهنویسی مختلف از حلقهها برای تکرار یک بلوک خاصی از کد استفاده میشود. در این بخش از مقالات آموزش زبان ++C با روش ایجاد حلقه for در زبان ++C به همراه ارائه مثال آشنا میشویم. اجرای حلقهها تا زمانی که شرط خاصی برقرار بشود ادامه مییابد. سه نوع حلقه در زبان برنامهنویسی ++C وجود دارند که شامل حلقه for، حلقه while و حلقه do…while میشود. نخستین نوع در این مقاله و دو نوع بعدی در بخش بعدی این سری مقالات معرفی شدهاند.
حلقه while عبارت تست را ارزیابی میکند. اگر عبارت تست درست باشد، کد درون بدنه حلقه while مورد ارزیابی قرار میگیرد. سپس عبارت تست مجدداً ارزیابی میشود. این فرایند تا زمانی که عبارت تست نادرست شود ادامه مییابد. هنگامی که عبارت تست نادرست شود، حلقه while خاتمه مییابد. حلقه For به طور عمده در مواردی استفاده میشود که تعداد تکرار حلقه از قبل مشخص باشد. اما حلقههای while در مواردی مورد استفاده قرار میگیرند که تعداد تکرارها به طور صریح از قبل مشخص نباشند و یا وابسته به شرایطی باشند که درون حلقه رخ میدهند.
دو گزاره به نام گزاره break و continue در زبان برنامهنویسی ++C وجود دارند که به طور خاص برای تغییر در گردش نرمال یک برنامه استفاده میشوند. در برخی موارد میخواهیم که اجرای یک حلقه برای یک شرایط تست خاص رد شود و یا بدون بررسی شرط حلقه بیدرنگ خاتمه یابد. برای مطالعه در این مورد به مقاله فوق مراجعه کنید.
اگر قصد دارید مقدار یک متغیر منفرد را با استفاده از گزارههای متوالی if..else..if بررسی کنید، بهتر است به جای آن از گزاره switch..case استفاده کنید. گزاره switch اگر نه همیشه، دستکم در اغلب موارد سریعتر از گزاره if…else است. ضمناً ساختار گزاره سوئیچ سادهتر و درک آن آسانتر است.
در زبان برنامهنویسی ++C از گزاره goto برای ایجاد تغییر در ترتیب نرمال اجرای برنامه و انتقال کنترل از یک بخش به بخش دیگر برنامه استفاده میشود. در مقاله به توضیح این ساختار میپردازیم. توجه داشته باشید که گزاره goto موجب برهم خوردن گردش نرمال برنامه میشود و توصیه شده است تا حد امکان و بلکه به هیچ وجه از آن در کدنویسی استفاده نشود.
تابعهای ++C
تابعها یکی از مفاهیم بسیار مهم در هر زبان برنامهنویسی محسوب میشوند. به بیان خیلی ساده هر تابع به مجموعهای از عملیات مختلف گفته میشود که بر روی ورودیهای تابع اجرا میشود تا یک خروجی به نام بازگشتی تابع تولید شود. در ادامه هفت مقالهای که در رابطه با توابع ++C در مجله فرادرس تهیه شدهاند به حضور شما معرفی میشوند.
در این مقاله هر آن چه باید در مورد تابعهای ++C بدانید را آموزش میدهیم. از جمله این که چه نوع تابعهایی در زبان برنامهنویسی ++C وجود دارند و مثالهایی از شیوه استفاده از آنها ارائه میکنیم. در برنامهنویسی منظور از تابع گزارهای است که کدها را برای اجرای وظیفه خاصی گروهبندی میکند. در ++C بسته به این که تابع از قبل تعریف شده باشد یا از سوی برنامهنویس ایجاد شود دو نوع تابع به نام تابع «کتابخانه» و تابع «تعریف شده از سوی کاربر» وجود دارد.
در این بخش از سری مقالات آموزش زبان برنامهنویسی ++C، در مورد رویکردهای مختلفی که میتوانید برای حل یک مسئله به کمک تابعها به کار گیرید، بحث کردهایم. بدین ترتیب با مفهوم تابعهای تعریف شده توسط کاربر آشنا میشوید.
تابعهای Overload شده به توابعی گفته میشود که نامی یکسان اما آرگومان(های) متفاوتی دارند. در این مقاله به بررسی نمونههایی از تابعهای Overload شده پرداختهایم. همچنین مثالهایی از شرایط مختلف overload کردن توابع ارائه شده است.
در این مقاله با معنی آرگومانهای پیشفرض و روش استفاده از آنها و اعلانهای ضروری برای کاربردشان آشنا میشوید. در برنامهنویسی ++C میتوانید مقادیر پیشفرض را برای پارامترهای تابع ارائه کنید.
در این مقاله در مورد انواع مختلف کلاس Storage در ++C صحبت خواهیم کرد. برخی از این کلاسها شامل local ،global ،static local ،register و thread local هستند. هر متغیری در ++C دو ویژگی به صورت نوع و کلاس storage دارد. کلاس storage خود دو مشخصه متفاوت برای متغیر دارد که یکی «عمر» و دیگری «دامنه» آن را کنترل میکند.
در این نوشته با روش ایجاد یک تابع بازگشتی در ++C آشنا میشویم. تابع بازگشتی تابعی است که خودش را فرامیخواند. چنین فرایندی به طور کلی «بازگشت» (recursion) نامیده میشود. توابع بازگشتی و به طور کلی رویکرد بازگشتی برای طراحی الگوریتمها یک ابزار قدرتمند در اختیار برنامهنویسی به حساب میآیند.
در زبان برنامهنویسی ++C نهتنها میتوان مقادیر را با ارجاع به یک تابع ارسال کرد، بلکه میتوان مقدار بازگشتی با ارجاع را نیز به دست آورد. برای درک این قابلیت، باید در مورد متغیرهای سراسری با در مورد متغیرهای سراسری که در مطالب قبلی معرفی کردیم، آشنایی داشته باشید.
آرایههای ++C
آرایهها نیز یکی از مفاهیم مهم در هر زبان برنامهنویسی محسوب میشوند و زبان ++C نیز از این قاعده مستثنی نیست. با استفاده از آرایهها میتوانیم مجموعهای از مقادیر را در اختیار داشته باشیم که دارای ترتیب معینی هستند و هر کدام یک اندیس دارند. رشتهها نیز نوع خاصی از آرایه هستند که در آن هر عنصر آرایه یک متغیر از نوع char بوده و به صورت متوالی در پشت سرهم قرار گرفته است. در ادامه در چهار مقاله به معرفی آرایههای ++C پرداختهایم.
در این مقاله به بررسی آرایه در ++C میپردازیم. بدن ترتیب با روش اعلان، مقداردهی اولیه و دسترسی به عناصر آرایه در زبان برنامهنویسی ++C آشنا خواهیم شد. یکی از مهمترین مشکلات در زمان برنامهنویسی، مدیریت دادههای زیاد از یک نوع خاص است. این کار با استفاده از آرایهها به سهولت انجام مییابد.
در این مقاله با مفهوم آرایه چندبعدی ++C و به طور خاص با روش اعلان آرایههای چندبعدی، دسترسی به آنها و استفاده مؤثر از این آرایهها در برنامههای مختلف آشنا میشویم. در زبان برنامهنویسی ++C میتوان یک آرایه از آرایهها ایجاد کرد که به نام آرایه چندبعدی شناخته میشود.
در این مقاله با روش ارسال آرایه به یک تابع در ++C آشنا میشویم. بدین ترتیب با روش ارسال آرایههای تکبعدی و چندبعدی آشنا میشویم. آرایهها را میتوان به صورت یک آرگومان به یک تابع ارسال کرد.
در این مقاله با شیوه کار با رشتههای ++C آشنا میشویم. بدین ترتیب روش اعلان رشته، مقداردهی اولیه و استفاده از آنها برای عملیات مختلف ورودی / خروجی مورد بررسی قرار میگیرند. رشته به مجموعه ای از کاراکترها گفته میشود. دو نوع رشته وجود دارند که به طور رایج در زبان برنامهنویسی ++C استفاده میشوند. یکی رشتههایی که شیء از نوع کلاس String و دیگری C-string یعنی رشتههای به سبک C هستند.
ساختارهای ++C
ساختار یا ساختمان به مجموعهای از دادهها گفته میشود که تحت شرایط و ضوابط خاصی که به نوع ساختار مربوط است پیرامون هم گرد آمدهاند. در ادامه در چهار مقاله به بررسی ساختارهای ++C پرداختهایم.
در این مقاله با ساختارهای ++C آشنا میشویم. به این ترتیب به توضیح مفهوم ساختار در این زبان برنامهنویسی، شیوه تعریف آن و کاربردشان در برنامهها میپردازیم. ساختار به مجموعهای از متغیرهای با نوع داده متفاوت گفته میشود که تحت یک نام منفرد گرد هم آمده باشند. ساختار شبیه به یک کلاس است، چون یک مجموعه از دادهها با انواع داده مختلف در خود جای میدهد.
در این مقاله به بررسی روشهای ارسال ساختار به تابع به صورت یک آرگومان میپردازیم و از آنها در برنامههای خود استفاده میکنیم. شایان ذکر است که متغیرهای ساختار را میتوان به یک تابع ارسال کرد و آنها را به مانند آرگومانهای نرمال بازگشت داد.
در این مقاله به بررسی روش اتصال اشارهگرهای ++C به ساختار میپردازیم. در این مسیر مثالهایی مورد بررسی قرار گرفتهاند که به درک کارکرد اشارهگرها برای دسترسی به دادههای درون یک ساختار در ++C کمک میکنند.
منظور از نوع شمارشی یک نوع داده تعریفشده از سوی کاربر است که شامل ثابتهای صحیحی است. برای تعریف یک نوع شمارشی باید از کلیدواژه enum استفاده کنیم. در این مقاله با طرز کار با نوع شمارشی (enum) در زبان ++C آشنا میشوید. ضمناً موارد استفاده شایع این نوع را در زبان برنامهنویسی ++C توضیح داده شده است.
اشیا و کلاسهای ++C
دو مورد از مفاهیم دیگر مهم در هر زبان برنامهنویسی مفاهیم کلاس و شیء هستند. به طور خلاصه اگر بخواهیم مثال بزنیم کلاس به معنی نقشه ساختمانی یک خانه و شیء نیز خود آن خانه است.
در ادامه چهار مقاله در خصوص کلاسها و اشیای ++C ارائه میشوند.
در این مقاله طرز کار با کلاسها و اشیا در ++C را میآموزید. ++C یک زبان برنامهنویسی چند پارادایمی است. یعنی از سبکهای برنامهنویسی مختلف پشتیبانی میکند. یکی از روشهای رایج برای حل مسائل برنامهنویسی ایجاد شیء است که به نام سبک برنامهنویسی شیءگرا نامیده میشود.
در این مقاله با مفاهیم مرتبط با سازنده در ++C آشنا خواهید شد. بدین ترتیب با معنی سازنده، شیوه ایجاد آن و انواع سازنده در ++C آشنا میشوید. «سازنده» (Constructor) نوع خاصی از تابع عضویت است که در زمان ایجاد یک شیء، آن را به صورت خودکار مقداردهی میکند.
در این مقاله با روش ارسال یک شیء به تابع و بازگشت آن در زبان برنامهنویسی ++C آشنا میشویم. در ++C میتوان اشیا را نیز به روشی مشابه ساختارها به توابع ارسال کرد.
اگر دو شیء از یک کلاس وجود داشته باشند که به عنوان عضو دادهای خود شامل رشته باشند، میتوانید معنای عملگر + را بازتعریف کنید تا آن رشتهها را به هم الحاق کند. این قابلیت در زبان برنامهنویسی ++C به برنامهنویس اجازه میدهد که معنای یک عملگر را بازتعریف کنید و به نام Overload کردن عملگر شناخته میشود. در این مقاله با روش پیادهسازی قابلیت Overload کردن عملگر در ++C آشنا میشوید.
اشارهگرهای ++C
مفهوم مهم دیگری که در اغلب زبانهای برنامهنویسی سطح پایین و برخی زبانهای سطح متوسط وجود دارد مفهوم اشارهگر است. یک اشارهگر در واقع مانند یک فلش است که به یک مکان حافظه اشاره میکند. بدین ترتیب میتوانیم مستقیماً به دستکاری آن آدرس حافظه بپردازیم. در این بخش 4 مقاله مرتبط با بحث اشارهگرهای ++C را به حضور شما تقدیم میکنیم.
اشارهگر یکی از قابلیتهای قدرتمند زبان ++C محسوب میشود که آن را از زبانهای برنامهنویسی دیگر مانند جاوا یا پایتون متمایز میسازد. اشارهگرهای ++C برای دسترسی به حافظه و دستکاری آدرس مورد استفاده قرار میگیرند. در این مقاله هر آن چه به اشارهگرهای ++C مربوط میشود را خواهیم آموخت. بدین ترتیب با روش ذخیرهسازی مقادیر در رایانه و شیوه دسترسی به آنها با استفاده از اشارهگرها آشنا میشویم.
اشارهگرها متغیرهایی هستند که آدرس حافظه را نگهداری میکنند. اشارهگرها نهتنها میتوانند آدرس یک متغیر منفرد را نگهداری کنند، بلکه قادر هستند آدرس سلولهای آرایه را نیز ذخیره کنند. در این مقاله در مورد رابطه بین آرایهها و اشارهگرهای ++C و همچنین استفاده مؤثر از آنها در برنامهها کردهایم.
یک روش برای ارسال آرگومانها به تابع وجود دارد که در آن مقدار واقعی آرگومان ارسال نمیشود، بلکه به جای آن تنها ارجاعی به آن مقدار ارسال خواهد شد. در این مقاله در مورد روش ارسال اشارهگرها به یک تابع به عنوان آرگومان صحبت میکنیم و شیوه استفاده مؤثر از آنها را در برنامههای ++C مورد بررسی قرار میدهیم. بدین ترتیب با روش فراخوانی با ارجاع در ++C آشنا میشوید.
از آرایهها میتوان برای ذخیرهسازی چندین داده همگن استفاده کرد، اما استفاده از آرایه چندین عیب دارد. در زمان اعلان یک آرایه میتوان حافظه را تخصیص داد، اما در اغلب موارد مقدار دقیق حافظه تا زمان اجرا قابل تشخیص نیست. در این مقاله با مدیریت حافظه در ++C به روشی بهینه با استفاده از عملیات حذف/اضافه آشنا خواهیم شد.
وراثت در ++C
اغلب زبانهای برنامهنویسی شیءگرا دارای نوعی از پیادهسازی مفهوم وراثت هستند. وراثت یکی از جنبههای مهم برنامهنویسی شیءگرا محسوب میشود. در این بخش از سری مقالات آموزش ++C در طی هفت مقاله به توضیح مفهوم وراثت در ++C پرداختهایم.
وراثت یکی از مفاهیم کلیدی برنامهنویسی شیءگرا در ++C محسوب میشود. این قابلیت به کاربر امکان میدهد که کلاس جدیدی (کلاس مشتق) از یک کلاس موجود (کلاس مبنا) بسازد. کلاس مشتق همه ویژگیها را از کلاس مبنا به ارث میبرد و میتواند قابلیتهای دیگری نیز صرفاً مخصوص خود داشته باشد. در این مقاله با همه مواردی که به وراثت در ++C مربوط میشوند، آشنا خواهید شد. به طور خاص در مورد ماهیت وراثت و روشهای مختلف برای پیادهسازی آن به همراه ارائه مثال صحبت میکنیم.
میتوان یک «کلاس مشتق» (Derived Class) را از یک «کلاس مبنا» (Base Class) با کنترلهای دسترسی متفاوتی اعلان کرد. برای نمونه میتوان از وراثت عمومی، وراثت حفاظتشده و یا وراثت خصوصی در این مورد استفاده کرد. در این مقاله با مفاهیم وراثت عمومی، حفاظتشده و خصوصی در ++C آشنا میشویم و با بررسی مثالهایی متوجه خواهیم شد که کجا و چگونه میتوانیم از هر کدام از انواع مختلف وراثت در ++C بهره بگیریم.
وراثت به توسعهدهندگان نرمافزار امکان میدهد که از کلاسهای موجود به کلاسهای جدیدی دست پیدا کنند. کلاس مشتق شده ویژگیهای کلاس مبنا (کلاس موجود) را به ارث میبرد. اما میتوان برخی از این ویژگیها را دور زد یا باطل کرد. در این مقاله با مفهوم باطل کردن تابع در ++C آشنا میشویم. همچنین شیوه دسترسی به تابعهای باطلشده کلاس مبنا در زبان برنامهنویسی ++C را فرا خواهیم گرفت.
در زبان ++C نه تنها میتوان یک کلاس را از کلاس مبنا به ارث بُرد، بلکه میتوان یک کلاس را از یک کلاس مشتق شده نیز مشتق کرد. این شکل از وراثت به نام وراثت چند سطحی خوانده میشود. این مدلها شامل وراثت چندگانه، چند سطحی و سلسله مراتبی در ++C هستند. در این مقاله با مدلهای مختلف وراثت در زبان برنامهنویسی ++C آشنا میشویم.
در این مقاله با شیوه ایجاد توابع دوست و کلاسهای دوست در ++C آشنا میشویم و از آنها به طرز مؤثری در برنامههای خود استفاده میکنیم. یکی از مهمترین مفاهیم برنامهنویسی شیءگرا بحث پنهانسازی دادهها است. بدین ترتیب تابعهای غیر عضو نمیتوانند به دادههای خصوصی یا حفاظتشده شیء دسترسی پیدا کنند.
در این مقاله با مفهوم تابع مجازی در ++C و موارد استفاده آن آشنا میشویم. همچنین با تابع مجازی خالص و کلاس مجرد نیز آشنا خواهیم شد. تابع مجازی یک تابع عضو در کلاس مبنا است که انتظار میرود در کلاسهای مشتق شده بازتعریف شود. پیش از آن که وارد جزییات شویم، ابتدا تلاش میکنیم به صورت شهودی دلیل نیاز به تابعهای مجازیهای را بفهمیم.
قالبها یکی از قدرتمندترین قابلیتهای زبان ++C محسوب میشوند که به شما امکان میدهند برنامههای ژنریک بنویسید. به بیان ساده میتوانید یک تابع یا کلاس منفرد ایجاد کنید که با بهرهگیری از قالبها با انواع داده مختلف کار میکند. در این راهنما در مورد مفهوم قالب در ++C صحبت میکنیم. به این ترتیب با قدرت قالبها برای برنامهنویسی ژنریک آشنا خواهید شد.
به این ترتیب در سیوشش مقاله فوق با اغلب مفاهیم عمده زبان برنامهنویسی ++C آشنا شدیم و مثالهایی از هر کدام از مفاهیم نیز مطرح شده و مورد برسی قرار گرفتند.
سخن پایانی درباره آموزش ++C
++C پس از معرفی خود تا مدتها استاندارد خاصی نداشت و با همان قواعد و الگوی مبدعش مورد استفاده قرار میگرفت. اما در سال 1998 از سوی کمیته ISO استانداردسازی شد. ++C به زبان ماشین کامپایل میشود و به این ترتیب در صورت بهینهسازی میتواند زبان بسیار سریعی باشد. این زبان دارای نوعبندی قوی است و دست کاربر را در انجام کارهای مختلف باز میگذارد. در این زبان میتوان از هر دو روش تعیین مانیفست و استنباطی استفاده کرد. ++C در جدیدترین نسخههای خود از هر دو روش نوعبندی اعلانی و استنباطی بهره میگیرد. همچنین هر دو نوع بررسی نوع دینامیک و استاتیک را اجرا میکند.
اگر از این زبان برای برنامهنویسی استفاده کنید، تنوع زیادی از پارادایمهای برنامهنویسی از پارادایم رویهای، ژنریک، پارادایمهای برنامهنویسی شیءگرا و موارد بسیار دیگر پیش روی شما قرار میگیرند. ++C به عنوان یکی از پرکاربردترین زبانهای برنامهنویسی جهان، یک زبانِ باز محسوب میشود، دارای تنوع بالایی از کامپایلرها است که روی پلتفرمهای مختلفی اجرا میشوند. در واقع کدی که صرفاً از کتابخانه استاندارد این زبان استفاده کند با کمی تغییر و یا بدون هیچ گونه تغییری روی اغلب پلتفرمها اجرا میشود. با در نظر گرفتن همه مزایای فوق، یادگیری این زبان برنامهنویسی به همه علاقهمندان توصیه میشود.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش برنامهنویسی ++c
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش سوئیفت (Swift) — مجموعه مقالات مجله فرادرس
- آموزش طراحی کامپایلر — مجموعه مقالات مجله فرادرس
==