ثابتها به مقادیر ثابتی اشاره دارند که برنامه نباید آنها را تغییر دهد و به آنها لیترال (Literal) گفته میشود.
ثابتها میتوانند از هر یک از انواع دادهای پایه باشند و میتوان آنها را به دستههای اعداد صحیح (Integer Numerals)، اعداد اعشاری (Floating-Point Numerals)، کاراکترها (Characters)، رشتهها (Strings) و مقادیر بولی (Boolean Values) تقسیم کرد.
دوباره باید گفت که ثابتها درست مانند متغیرهای معمولی رفتار میکنند، با این تفاوت که مقدار آنها پس از تعریف نمیتواند تغییر یابد.
اعداد صحیح (Integer Literals)
یک عدد صحیح میتواند یک مقدار دهدهی (Decimal)، هشتهشتی (Octal) یا هگزادسیمال (Hexadecimal) باشد. یک پیشوند (Prefix) پایه یا مبنای عدد را مشخص میکند: 0x
یا 0X
برای هگزادسیمال، 0
برای هشتهشتی، و بدون هیچ پیشوندی برای دهدهی.
یک عدد صحیح همچنین میتواند یک پسوند (Suffix) داشته باشد که ترکیبی از U و L برای مشخص کردن بدون علامت (Unsigned) و بلند (Long) است. این پسوند میتواند با حروف بزرگ یا کوچک نوشته شود و ترتیب آنها اهمیتی ندارد.
در اینجا چند مثال از لیترالهای عدد صحیح آورده شده است
212 // Legal 215u // Legal 0xFeeL // Legal 078 // Illegal: 8 is not an octal digit 032UU // Illegal: cannot repeat a suffix
در ادامه نمونههای دیگری از انواع مختلف لیترالهای عدد صحیح آورده شده است
85 // decimal 0213 // octal 0x4b // hexadecimal 30 // int 30u // unsigned int 30l // long 30ul // unsigned long
لیترالهای اعشاری (Floating-point Literals)
یک لیترال اعشاری شامل قسمت عدد صحیح، نقطه اعشار، قسمت کسری و قسمت توان (Exponent) است. شما میتوانید لیترالهای اعشاری را به صورت دهدهی (Decimal) یا نمایی (Exponential) نمایش دهید.
هنگام استفاده از فرم دهدهی، باید نقطه اعشار، توان، یا هر دو را درج کنید. و هنگام استفاده از فرم نمایی، باید قسمت عدد صحیح، قسمت کسری، یا هر دو را درج نمایید. توان علامتدار با e یا E مشخص میشود.
در اینجا چند نمونه از لیترالهای اعشاری آورده شده است
3.14159 // Legal 314159E-5L // Legal 510E // Illegal: incomplete exponent 210f // Illegal: no decimal or exponent .e55 // Illegal: missing integer or fraction
در زبان C++ دو لیترال بولی وجود دارد که بخشی از کلمات کلیدی استاندارد زبان هستند:
- مقدار true که نشاندهنده درست بودن است.
- مقدار false که نشاندهنده نادرست بودن است.
نباید مقدار true را معادل با ۱ و مقدار false را معادل با ۰ در نظر بگیرید.
لیترالهای کاراکتر (Character Literals)
لیترالهای کاراکتر در علامت نقلقول تکی قرار میگیرند. اگر لیترال با حرف بزرگ L آغاز شود (مثلاً L'x'
)، به آن لیترال کاراکتر گسترده (wide character) گفته میشود و باید در متغیر از نوع wchar_t
ذخیره شود. در غیر این صورت (مثلاً 'x'
)، لیترال کاراکتر باریک (narrow) محسوب میشود و میتوان آن را در یک متغیر ساده از نوع char
ذخیره کرد.
یک لیترال کاراکتر میتواند یکی از موارد زیر باشد:
- یک کاراکتر معمولی (مانند
'x'
) - یک دنباله فرار (escape sequence) مانند
'\t'
- یک کاراکتر یونیورسال (universal character) مانند
'\u02C0'
در زبان C++ برخی کاراکترها وقتی با علامت \
(بکاسلش) نوشته میشوند، معانی خاصی پیدا میکنند و برای نمایش مواردی مانند خط جدید (\n
) یا تب (فاصله افقی) (\t
) استفاده میشوند.
در اینجا لیستی از برخی از این کدهای دنباله فرار (Escape Sequence) آورده شده است:
مثال
در زیر یک مثال آورده شده است که چند کاراکتر دنباله فرار را نشان میدهد:
#include <iostream> using namespace std; int main() { cout << "Hello\tWorld\n\n"; return 0; }
وقتی کد بالا کامپایل و اجرا میشود، خروجی زیر را تولید میکند −
Hello World
لیترالهای رشتهای (String Literals)
لیترالهای رشتهای در علامت نقلقول دوتایی قرار میگیرند. یک رشته شامل کاراکترهایی است که مشابه لیترالهای کاراکتری هستند: کاراکترهای معمولی، دنبالههای فرار (Escape Sequences) و کاراکترهای یونیورسال (Universal Characters).
شما میتوانید یک خط طولانی را به چند خط تقسیم کرده و آنها را با استفاده از لیترالهای رشتهای و فاصلههای خالی (Whitespace) جدا کنید.
در اینجا چند نمونه از لیترالهای رشتهای آورده شده است. تمام این سه شکل، رشتههایی یکسان را تولید میکنند.
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
تعریف ثابتها (Defining Constants)
در زبان C++ دو روش ساده برای تعریف ثابتها وجود دارد:
- استفاده از پیشپردازنده
#define
- استفاده از کلیدواژه
const
پیشپردازنده #define
در ادامه شکل کلی استفاده از پیشپردازنده #define
برای تعریف یک ثابت آورده شده است:
#define CONSTANT_NAME value
مثال:
#define PI 3.14159
#define MAX_LENGTH 100
در این روش، هنگام کامپایل، پیشپردازنده تمام مواردی که CONSTANT_NAME
در کد ظاهر شدهاند را با مقدار مربوطه جایگزین میکند. توجه داشته باشید که این یک جایگزینی متنی است و نوع دادهای ندارد.
#define identifier value
مثال
مثال زیر نحوه استفاده از پیشپردازنده #define برای تعریف ثابت را بهصورت کامل توضیح میدهد:
#include <iostream> using namespace std; #define LENGTH 10 #define WIDTH 5 #define NEWLINE '\n' int main() { int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
وقتی کد بالا کامپایل و اجرا میشود، خروجی زیر را تولید میکند
50
کلیدواژه const
شما میتوانید از پیشوند const برای اعلام ثابتها با نوع داده مشخص به شکل زیر استفاده کنید −
const type variable = value;
مثال
مثال زیر نحوه استفاده از کلیدواژه const برای تعریف ثابتها را بهصورت کامل توضیح میدهد:
#include <iostream> using namespace std; int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = '\n'; int area; area = LENGTH * WIDTH; cout << area; cout << NEWLINE; return 0; }
وقتی کد بالا کامپایل و اجرا میشود، خروجی زیر را تولید میکند
50
توجه داشته باشید که تعریف ثابتها با حروف بزرگ (CAPITALS) یک روش برنامهنویسی خوب و رایج است.