وقتی به یک برنامهی C++ نگاه میکنیم، میتوان آن را بهعنوان مجموعهای از اشیاء تعریف کرد که از طریق فراخوانی متدهای یکدیگر با هم ارتباط برقرار میکنند. حال بیایید بهصورت مختصر با مفهوم کلاس، شیء، متد و متغیر نمونه آشنا شویم.
- شیء − اشیاء دارای حالتها و رفتارها هستند. مثال: یک سگ حالتهایی مانند (رنگ، نام، نژاد) و همچنین رفتارهایی مانند (جنباندن دم، پارس کردن، غذا خوردن) دارد. یک شیء نمونهای از یک کلاس است.
- کلاس − کلاس را میتوان بهعنوان یک قالب یا نقشه راه تعریف کرد که رفتارها یا حالتهایی که اشیاء از نوع آن پشتیبانی میکنند را توصیف میکند.
- متدها − متد در اصل یک رفتار است. یک کلاس میتواند شامل چندین متد باشد. در متدها منطق برنامه نوشته میشود، دادهها تغییر داده میشوند و تمام عملیات اجرا میشود.
- متغیرهای نمونه − هر شیء دارای مجموعهی منحصر به فردی از متغیرهای نمونه است. حالت یک شیء با مقادیری که به این متغیرهای نمونه اختصاص داده میشود، شکل میگیرد.
ساختار برنامهی C++
ساختار پایه یک برنامهی C++ شامل بخشهای زیر است:
- بخش درج فایلهای هدر: در این بخش، تمام فایلهای هدر مورد نیاز که توابع آنها قرار است در برنامه استفاده شوند، وارد میشوند.
- بخش فضای نام: در این بخش فضای نام مورد استفاده قرار میگیرد.
- بخش تابع main(): در این بخش کد اصلی نوشته میشود. تابع main() نقطه شروع اجرای هر برنامهی C++ است.
برای یادگیری بیشتر بخوانید: برنامهی سلام جهان در C++.
مثال
بیایید یک کد ساده ببینیم که کلمات Hello World را چاپ میکند.
#include <iostream> using namespace std; // main() is where program execution begins. int main() { cout << "Hello World"; // prints Hello World return 0; }
توضیح مثال بیایید به قسمتهای مختلف برنامهی بالا نگاه کنیم
- زبان C++ چندین فایل هدر تعریف کرده است که شامل اطلاعاتی هستند که برای برنامه شما ضروری یا مفید هستند. برای این برنامه، فایل هدر
<iostream>
لازم است. - خط
using namespace std;
به کامپایلر میگوید که فضای نامstd
را استفاده کند. فضای نامها (namespace) اضافهای نسبتاً جدید در C++ هستند. - خط بعدی
'// main() is where program execution begins.'
یک توضیح تکخطی است که در C++ با//
شروع میشود و تا پایان همان خط ادامه دارد. - خط
int main()
تابع اصلی است که اجرای برنامه از آنجا شروع میشود. - خط بعدی
cout << "Hello World";
باعث میشود پیام"Hello World"
روی صفحه نمایش داده شود. - خط
return 0;
تابع main را خاتمه میدهد و مقدار ۰ را به فرآیند فراخواننده بازمیگرداند.
کامپایل و اجرای برنامه C++ بیایید ببینیم چگونه فایل را ذخیره کنیم، برنامه را کامپایل و اجرا کنیم. لطفاً مراحل زیر را دنبال کنید :
۱. یک ویرایشگر متن باز کنید و کد را مانند بالا وارد کنید.
۲. فایل را با نام hello.cpp
ذخیره کنید.
۳. پنجره خط فرمان (Command Prompt) را باز کنید و به پوشهای که فایل را ذخیره کردهاید بروید.
۴. تایپ کنید g++ hello.cpp
و اینتر بزنید تا کد شما کامپایل شود. اگر کد شما خطایی نداشته باشد، خط فرمان به خط بعد میرود و فایل اجرایی a.out
ساخته میشود.
۵. حالا تایپ کنید ./a.out
تا برنامه اجرا شود.
شما خواهید دید که عبارت Hello World
روی صفحه چاپ میشود.
$ g++ hello.cpp
$ ./a.out
Hello World
مطمئن شوید که g++
در مسیر (PATH) شما قرار دارد و در همان پوشهای که فایل hello.cpp
وجود دارد، در حال اجرا هستید.
شما همچنین میتوانید برنامههای C/C++ را با استفاده از فایل makefile کامپایل کنید. برای اطلاعات بیشتر میتوانید آموزش «Makefile» را بررسی کنید.
نقطهویرگول و بلوکها در C++ در C++ نقطهویرگول پایاندهنده یک دستور است. یعنی هر دستور باید با نقطهویرگول تمام شود. این علامت پایان یک واحد منطقی را مشخص میکند.
برای مثال، سه دستور متفاوت به شکل زیر هستند −
x = y; y = y + 1; add(x, y);
یک بلوک مجموعهای از دستورات مرتبط منطقی است که توسط آکولادهای باز {
و بسته }
احاطه شدهاند. برای مثال
{ cout << "Hello World"; // prints Hello World return 0; }
در C++ پایان خط بهعنوان پایاندهنده دستور شناخته نمیشود. به همین دلیل، مهم نیست که یک دستور را کجا در یک خط قرار دهید. برای مثال −
x = y; y = y + 1; add(x, y);
معادل است با
x = y; y = y + 1; add(x, y);
شناسههای C++
شناسه در C++ نامی است که برای شناسایی یک متغیر، تابع، کلاس، ماژول یا هر آیتم تعریف شده توسط کاربر استفاده میشود. یک شناسه با یک حرف بزرگ A تا Z یا حرف کوچک a تا z یا یک زیرخط (_) شروع میشود و میتواند به دنبال آن صفر یا بیشتر حروف، زیرخطها و اعداد (0 تا 9) بیاید.
C++ اجازه استفاده از کاراکترهای علامتگذاری مانند @، $ و % را در شناسهها نمیدهد. زبان برنامهنویسی C++ حساس به حروف بزرگ و کوچک است، یعنی شناسههایی مانندManpower
و manpower
دو شناسه متفاوت محسوب میشوند.
در ادامه چند مثال از شناسههای مجاز آورده شده است
mohd zara abc move_name a_123 myname50 _temp j a23b9 retVal
کلمات کلیدی C++
لیست زیر کلمات رزرو شده در زبان C++ را نشان میدهد. این کلمات رزرو شده نمیتوانند بهعنوان نام ثابت، متغیر یا هیچ شناسهی دیگری استفاده شوند.
تریگرافها (Trigraphs)
چند کاراکتر در C++ یک نمایش جایگزین دارند که به آن دنبالهی تریگراف (trigraph) گفته میشود. تریگراف یک دنبالهی سهکاراکتری است که نمایانگر یک کاراکتر منفرد است و همیشه با دو علامت سؤال شروع میشود.
تریگرافها در هر جایی که ظاهر شوند، از جمله در رشتهها (string literals)، کاراکترها (character literals)، کامنتها و دستورات پیشپردازنده گسترش داده میشوند.در ادامه، رایجترین دنبالههای تریگراف آورده شدهاند.
تمام کامپایلرها از تریگرافها پشتیبانی نمیکنند و به دلیل ماهیت گیجکنندهشان استفاده از آنها توصیه نمیشود.
فاصلههای سفید در C++
خطی که فقط شامل فاصلههای سفید باشد، احتمالاً همراه با یک توضیح (کامنت)، به عنوان یک خط خالی شناخته میشود و کامپایلر C++ آن را کاملاً نادیده میگیرد.
فاصله سفید (Whitespace) در C++ به فاصلهها، تبها، کاراکترهای پایان خط و کامنتها گفته میشود. فاصله سفید بخشهای مختلف یک دستور را از هم جدا میکند و به کامپایلر کمک میکند تا تشخیص دهد یک بخش از دستور، مانند int، کجا تمام میشود و بخش بعدی کجا شروع میشود.
دستور ۱
int age;
در دستور بالا باید حداقل یک کاراکتر فاصله سفید (معمولاً یک فاصله) بین int
و age
وجود داشته باشد تا کامپایلر بتواند آنها را از هم تشخیص دهد.
دستور ۲
fruit = apples + oranges; // Get the total fruit
در دستور ۲ بالا، وجود فاصله سفید بین fruit
و =
یا بین =
و apples
لازم نیست، اگرچه شما آزاد هستید برای خوانایی بهتر، مقداری فاصله قرار دهید.
ساختار برنامه C++ با رویکرد شیءگرا C++ علاوه بر رویکرد برنامهنویسی رویهای، از برنامهنویسی شیءگرا نیز پشتیبانی میکند.
مثال این مثال یک برنامه C++ را بر اساس رویکرد شیءگرا نشان میدهد.
#include <iostream> using namespace std; class Numbers { private: int a; int b; public: // Function to set values void setValues(int x, int y) { a = x; b = y; } // Function to add these numbers double addition() { return a + b; } // Function to display values void display() { cout << "a: " << a << ", b: " << b << endl; } }; int main() { // Create an object of Numbers class Numbers num; // Set values num.setValues(10, 20); // Display the values num.display(); // Find the addition int sum = num.addition(); cout << "Sum of numbers: " << sum << endl; return 0; }
قسمتهای ساختار برنامه C++ با رویکرد شیءگرا
قسمتهای مختلف ساختار برنامه C++ با رویکرد شیءگرا به شرح زیر است:
- اعلان کلاس (Class Declaration) کلاس یک قالب برای یک شیء است، یا میتوان گفت کلاس کارخانهای است برای تولید یک شیء. کلاس نوعی دادهی سفارشی است که در آن ساختاری برای یک شیء ساخته میشود.
اعلان کلاس شامل بخشهای زیر است:
- تغییردهندههای دسترسی (Access Modifiers): زبان C++ سه نوع تغییردهنده دسترسی را پشتیبانی میکند: private (خصوصی)، public (عمومی) و protected (محافظتشده). دسترسی به اعضای داده و توابع عضو توسط این تغییردهندهها تعریف میشود.
- اعضای داده و توابع عضو: متغیرهایی که در اعلان کلاس استفاده میشوند به عنوان اعضای داده شناخته میشوند و توابع عضوی، توابعی هستند که روی اعضای داده کار میکنند.
مثال
براساس مثال بالا، بخش زیر از اعلان یک کلاس
class Numbers { private: int a; int b; public: // Function to set values void setValues(int x, int y) { a = x; b = y; } // Function to add these numbers double addition() { return a + b; } // Function to display values void display() { cout << "a: " << a << ", b: " << b << endl; } };
اعضای داده زیر تحت تغییردهنده دسترسی خصوصی (private) تعریف شدهاند، یعنی این اعضای داده فقط توسط توابع عضو درون همان کلاس قابل استفاده هستند .
private: int a; int b;
توابع عضو زیر در کلاس استفاده شدهاند
void setValues(int x, int y); double addition(); void display();
۲. ایجاد شیء
در مثال بالا، دستور زیر برای ایجاد شیء استفاده شده است
Numbers num;