المتغيرات وأنواع البيانات في C++
C++ وُلدت من رحم لغة C، فورثت قوتها وسرعتها، وأضافت إليها أدوات حديثة تجعل الكتابة أسهل وأأمن. في هذا الدرس ستتعرف على المتغيرات وأنواع البيانات في C++، وستلاحظ كيف تجعل أدوات مثل string و cout العمل أسهل بكثير مما هو في C.
تعريف المتغير
Section titled “تعريف المتغير”#include <iostream>#include <string>using namespace std;
int main() { string name = "سارة"; int points = 10; points += 5; cout << name << " لديها " << points << " نقطة" << endl; return 0;}سارة لديها 15 نقطة- الصيغة: النوع ثم الاسم ثم القيمة، وفاصلة منقوطة في النهاية.
cout <<تطبع كل ما يُرسل إليها، ويمكن سلسلة عدة قيم بـ<<متتالية.endlسطر جديد.using namespace std;تسمح لنا بكتابةcoutوstringبدلاً منstd::coutوstd::string.
تخيّل cout مثل حزام نقل في مصنع: كل << تضع قطعة جديدة على الحزام، والحزام يوصلها كلها للشاشة بالترتيب.
الأنواع الأساسية
Section titled “الأنواع الأساسية”int students = 30;double price = 12.5;bool isOpen = true;char grade = 'A';cout << students << " " << price << " " << isOpen << " " << grade << endl;cout << boolalpha << isOpen << endl;30 12.5 1 Atrue| النوع | يخزن |
|---|---|
int |
أعداد صحيحة |
double |
أعداد عشرية |
bool |
true أو false |
char |
حرف واحد بين علامتين مفردتين |
string |
نص بين علامتين مزدوجتين (يحتاج #include <string>) |
لاحظ أن cout تطبع bool كرقم: 1 للصح و 0 للخطأ، كما في C. وإذا أضفت boolalpha تطبع الكلمتين true و false.
string: نصوص بلا عناء
Section titled “string: نصوص بلا عناء”في C كانت النصوص مصفوفات حروف تحتاج حذراً شديداً في الحجم. في C++ هناك النوع string الذي يدير الذاكرة بنفسه:
string first = "Ahmed";cout << first.length() << endl;cout << first + " Ali" << endl;5Ahmed Alilength() لطول النص، و + لدمج النصوص مباشرة، دون أن تقلق من حجم الذاكرة.
العمليات الحسابية
Section titled “العمليات الحسابية”cout << 10 / 4 << endl;cout << 10.0 / 4 << endl;cout << 10 % 4 << endl;22.52قسمة عددين صحيحين تحذف الكسر، تماماً كما في C. اجعل أحد الطرفين عشرياً للحصول على الكسر.
auto و const
Section titled “auto و const”auto city = string("القاهرة");auto count = 3;const double TAX = 0.14;auto: يستنتج المترجم النوع من القيمة:countمن نوعint. مفيدة جداً مع الأنواع الطويلة التي ستراها لاحقاً.const: قيمة لا يمكن تغييرها بعد تعريفها.
التحويل بين الأنواع
Section titled “التحويل بين الأنواع”int n = stoi("25");cout << n + 5 << endl;cout << to_string(42) + "!" << endl;double avg = 7.9;cout << static_cast<int>(avg) << endl;3042!7stoi(من string to int): من نص إلى عدد صحيح، ومثلهاstodللعشري.to_string: من رقم إلى نص.static_cast<int>(...): التحويل الصريح بأسلوب C++، وهو أوضح وأأمن من أسلوب C(int). ولاحظ أنه يقطع الكسر ولا يقرّب.
تنسيق الأرقام
Section titled “تنسيق الأرقام”#include <iomanip>
cout << fixed << setprecision(2) << 12.5 << endl;12.50fixed مع setprecision(2) تعرض رقمين بعد الفاصلة دائماً. وانتبه: هذا الإعداد يبقى سارياً على كل الأرقام العشرية التي تطبعها بعده.
جرّب بنفسك
Section titled “جرّب بنفسك”#include <iostream>#include <string>using namespace std;
int main() { string productName = "سماعة"; double unitPrice = 150.0; int quantity = 2; double total = unitPrice * quantity;
cout << "المنتج: " << productName << endl; cout << "الإجمالي: " << total << " جنيه" << endl; return 0;}المنتج: سماعةالإجمالي: 300 جنيهلاحظ أن cout تطبع 300 وليس 300.0، لأنها تحذف الأصفار غير الضرورية افتراضياً. تحدٍّ: اجعلها تطبع 300.00 باستخدام fixed و setprecision.
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان #include: استخدام
stringبدون#include <string>قد يعمل أحياناً ويفشل في مترجم آخر. أضف الملفات التي تحتاجها دائماً. - دمج نص مع رقم بـ +:
"العمر: " + 14لا يعمل كما تتوقع. استخدم<<معcout، أوto_string(14). - متغير بلا قيمة أولية:
int x;يحمل قيمة عشوائية. أعطه قيمة دائماً.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما ناتج cout << static_cast<int>(9.8);؟
static_cast<int> يقطع الجزء العشري ولا يقرّب، فالنتيجة 9.
سؤال
ماذا تطبع cout << true; بدون boolalpha؟
cout تطبع القيم المنطقية كأرقام افتراضياً: 1 للصح و 0 للخطأ.
الخلاصة
Section titled “الخلاصة”cout <<للطباعة، وendlلسطر جديد، وusing namespace std;لاختصار الكتابة.- الأنواع الأساسية:
intوdoubleوboolوchar، وstringللنصوص الحديثة. autoتستنتج النوع، وconstللثوابت.stoiوto_stringللتحويل بين النصوص والأرقام، وstatic_castللتحويل الصريح.fixedوsetprecisionلتنسيق الأرقام العشرية، وتأثيرهما يستمر.