C++: المتغيرات وأنواع البيانات الأساسية
آخر تحديث: 2026-08-26
في الدرس 02 أعددنا بيئة التطوير وأصبحنا نستطيع ترجمة وتشغيل البرامج.
لكن البرامج لا يمكنها فقط إخراج نص ثابت — فهي تحتاج لأن تكون قادرة على تذكر الأشياء ومعالجة البيانات. هذا هو غرض المتغيرات.
تمامًا كما في الرياضيات، تحتاج لتعريف x، y، z أولًا؛ في البرمجة، يجب "تعريف" المتغيرات قبل أن تتمكن من تخزين البيانات.
1. ما هو المتغير؟
(1) 1.1 المتغيرات في الحياة اليومية
| سيناريو من الحياة | المقابل البرمجي |
|---|---|
| لديك اسم، لكن عمرك يتغير كل عام | متغير: قيمته يمكن أن تتغير |
| لديك رقم هوية لا يتغير أبدًا | ثابت: قيمته لا يمكن أن تتغير |
| لديك كوب يمكن أن يحتوي ماءً أو كولاً | متغير: النوع ثابت (كوب)، القيمة يمكن أن تتغير (ما بداخله) |
المتغير هو "صندوق" في الذاكرة — يمكنك وضع أشياء فيه (تعيين قيم) وأخذ أشياء منه (قراءة قيم).
(2) 1.2 لماذا نحتاج المتغيرات؟
بدون متغيرات، يمكن للبرامج فقط فعل أشياء "جامدة":
// Without variables, you can only output fixed text
std::cout << "Hello, World!" << std::endl;
بالمتغيرات، تصبح البرامج "حية":
// With variables, you can remember user input
std::string name;
std::cin >> name;
std::cout << "Hello, " << name << "!" << std::endl;
2. أنواع البيانات الأساسية
C++ هي لغة ذات كتابة ساكنة — كل متغير يجب تعريف نوعه أولًا، والنوع لا يمكن تغييره.
(1) 2.1 خمسة أنواع بيانات أساسية
| النوع | الكلمة المفتاحية | الحجم | المدى | تشبيه من الحياة |
|---|---|---|---|---|
| عدد صحيح | int |
4 بايت | -2,147,483,648 ~ 2,147,483,647 | عدد الأشخاص، العمر، السنة |
| فاصلة عائمة | double |
8 بايت | تقريبًا ±1.7 × 10³⁰⁸ | الطول، الوزن، السعر |
| حرف | char |
1 بايت | -128 ~ 127 (أو 0 ~ 255) | حرف واحد، تقدير (A/B/C) |
| منطقي | bool |
1 بايت | true أو false |
هل نجح، هل هو بالغ |
| سلسلة نصية | string |
متغير | أي طول | الاسم، العنوان، جملة |
💡 نصيحة: string ليس "نوعًا أساسيًا" في C++، بل نوع توفره المكتبة القياسية. تحتاج #include <string> قبل استخدامه.
(2) 2.2 تعريف المتغيرات
الصياغة:
Type variableName;
مثال:
int age; // Declare an integer variable named age
double price; // Declare a floating-point variable named price
char grade; // Declare a character variable named grade
bool isPassed; // Declare a boolean variable named isPassed
std::string name; // Declare a string variable named name
(3) 2.3 التعريف والإسناد في نفس الوقت (التهيئة)
الصياغة:
Type variableName = value;
مثال:
int age = 25; // Declare age and assign 25
double price = 19.99; // Declare price and assign 19.99
char grade = 'A'; // Declare grade and assign 'A' (note: characters use single quotes)
bool isPassed = true; // Declare isPassed and assign true
std::string name = "MOTO"; // Declare name and assign "MOTO" (note: strings use double quotes)
💡 نصيحة: أدخلت C++11 أسلوب تهيئة أكثر حداثة (التهيئة الموحدة):
int age = {25}; // Uniform initialization (recommended)
double price{19.99}; // Can omit the equals sign (recommended)
هذا الأسلوب يمنع التحويلات الضيقة (مثلًا، إسناد 3.14 إلى int سيسبب خطأ بدلًا من الاقتطاع الصامت).
3. استخدام المتغيرات
▶ مثال 1: حساب مساحة دائرة (صعوبة ⭐)
#include <iostream>
int main() {
const double PI = 3.14159; // Constant (covered later)
double radius;
std::cout << "Please enter the radius of the circle:";
std::cin >> radius;
double area = PI * radius * radius;
std::cout << "The area of the circle is:" << area << std::endl;
return 0;
}
الخرج:
Please enter the radius of the circle:
The area of the circle is:
نتيجة التشغيل:
Please enter the radius of the circle:5
The area of the circle is:78.5397
تحليل الكود:
const double PI = 3.14159;— تعريف ثابت PI لا يمكن تغيير قيمتهdouble radius;— تعريف متغير فاصلة عائمة radiusstd::cin >> radius;— قراءة إدخال المستخدم من لوحة المفاتيح وتخزينه في radiusdouble area = PI * radius * radius;— حساب المساحة وتخزين النتيجة في areastd::cout << ...— إخراج النتيجة
4. قواعد تسمية المتغيرات
C++ لديها قواعد صارمة لأسماء المتغيرات:
(1) 4.1 قواعد صارمة (يجب اتباعها)
| القاعدة | مثال صالح | مثال غير صالح |
|---|---|---|
| يمكن أن يحتوي فقط على حروف وأرقام وشرطات سفلية | my_age، score2 |
my-age (الشرطات غير مسموحة) |
| لا يمكن أن يبدأ برقم | age2 |
2age |
| حساس لحالة الأحرف | age وAge متغيران مختلفان |
— |
| لا يمكن أن يكون كلمة مفتاحية | int myInt = 5; |
int int = 5; (int كلمة مفتاحية) |
قائمة الكلمات المفتاحية في C++ (جزئية):
int, double, char, bool, string, if, else, for, while,
return, class, public, private, new, delete, ...
(2) 4.2 قواعد مرنة (موصى بها بشدة)
المترجم لا يفرضها، لكن اتباعها يجعل كودك أكثر قابلية للقراءة:
| القاعدة | الأسلوب الموصى به | غير موصى به |
|---|---|---|
| أسماء المتغيرات يجب أن تكون ذات معنى | studentAge |
a، x1 |
| استخدم camelCase للأسماء المتعددة الكلمات | studentAge، totalScore |
student_age، total_score |
| الثوابت يجب أن تكون بأحرف كبيرة | const int MAX_SIZE = 100; |
const int maxSize = 100; |
💡 نصيحة: الفرق المختلفة قد تكون لديها اصطلاحات تسمية مختلفة. هذا الدرس يستخدم camelCase.
5. الثوابت (const)
بعض القيم يجب ألا تتغير أبدًا، مثل π، عدد أيام السنة، أو الحد الأقصى لطول مصفوفة.
(1) 5.1 لماذا نحتاج الثوابت؟
بدون ثوابت (مثال سيئ):
double circumference = 3.14159 * diameter; // This 3.14159 is a "magic number"
double area = 3.14159 * radius * radius; // If π is wrong, you have to fix it in two places
بثوابت (مثال جيد):
const double PI = 3.14159;
double circumference = PI * diameter; // Clear and easy to change
double area = PI * radius * radius;
(2) 5.2 كيفية تعريف الثوابت
الصياغة:
const Type CONST_NAME = value;
مثال:
const int DAYS_PER_WEEK = 7;
const double PI = 3.14159;
const std::string SCHOOL_NAME = "Meijia Vocational College";
💡 نصيحة: أسماء الثوابت عادةً تكون بأحرف كبيرة مع شرطات سفلية تفصل الكلمات — هذه اصطلاح في C++.
(3) 5.3 خصائص الثوابت
- يجب تهيئتها (يجب تعيين قيمة عند التعريف)
const int MAX_SIZE; // ❌ Error: constant must be initialized
- لا يمكن تعديلها
const int MAX_SIZE = 100;
MAX_SIZE = 200; // ❌ Error: cannot modify a constant's value
6. الإدخال والإخراج (cin وcout المتقدم)
(1) 6.1 قراءة متغيرات متعددة في وقت واحد
يمكن لـ cin قراءة متغيرات متعددة في عبارة واحدة، مفصولة بمسافات أو أسطر جديدة:
#include <iostream>
#include <string>
int main() {
int age;
std::string name;
std::cout << "Please enter your name and age(separated by spaces):";
std::cin >> name >> age; // Read two variables at once
std::cout << "Hello," << name << "! You are " << age << " years old。" << std::endl;
return 0;
}
نتيجة التشغيل:
Please enter your name and age(separated by spaces):MOTO 35
Hello,MOTO! You are 35 years old。
(2) 6.2 المزج بين cin وcout
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
double height;
std::cout << "Please enter your name: ";
std::cin >> name;
std::cout << "Please enter your age: ";
std::cin >> age;
std::cout << "Please enter your height (meters): ";
std::cin >> height;
std::cout << "========== Personal Info ==========" << std::endl;
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << " years old" << std::endl;
std::cout << "Height: " << height << " meters" << std::endl;
return 0;
}
7. الأخطاء الشائعة وتصحيحها
(1) 7.1 نسيان تهيئة متغير
مثال خطأ:
#include <iostream>
int main() {
int x; // Declared x but didn't assign a value
std::cout << x << std::endl; // ❌ x's value is "garbage" — undefined
return 0;
}
الطريقة الصحيحة:
int x = 0; // Initialize when declaring
std::cout << x << std::endl; // ✅ Outputs 0
💡 نصيحة: مترجمات C++ الحديثة ستحذرك من استخدام متغيرات غير مهيأة، لكن لا تعتمد على المترجم — طوّر عادة حسنة بالتهيئة دائمًا.
(2) 7.2 عدم تطابق الأنواع
مثال خطأ:
int age;
std::cin >> age;
// If the user enters "abc", age will remain unchanged (or worse)
الطريقة الصحيحة (سنتعلم كيفية التحقق من الإدخال لاحقًا):
int age;
std::cin >> age;
if (std::cin.fail()) {
std::cout << "InputError!Please enter a number." << std::endl;
}
(ستُغطى هذه المشكلة بالتفصيل في الدرس 08 — حاليًا، كن فقط على دراية بالمشكلة.)
8. تطبيق: آلة حاسبة بسيطة
▶ مثال 2: آلة حاسبة للجمع والطرح والضرب والقسمة (صعوبة ⭐⭐)
#include <iostream>
int main() {
double num1, num2;
char op;
std::cout << "Please enter the first number: ";
std::cin >> num1;
std::cout << "Please enter an operator (+ - * /): ";
std::cin >> op;
std::cout << "Please enter the second number: ";
std::cin >> num2;
double result;
if (op == '+') {
result = num1 + num2;
} else if (op == '-') {
result = num1 - num2;
} else if (op == '*') {
result = num1 * num2;
} else if (op == '/') {
if (num2 != 0) {
result = num1 / num2;
} else {
std::cout << "Error: Divisor cannot be 0!" << std::endl;
return 1; // Abnormal exit
}
} else {
std::cout << "Error: Unsupported operator!" << std::endl;
return 1;
}
std::cout << "Result: " << num1 << " " << op << " " << num2 << " = " << result << std::endl;
return 0;
}
الخرج:
Please enter the first number:
Please enter an operator (+ - * /):
Please enter the second number:
Error: Divisor cannot be 0!
Error: Unsupported operator!
Result: =
نتيجة التشغيل:
Please enter the first number: 10
Please enter an operator (+ - * /): *
Please enter the second number: 5
Result: 10 * 5 = 50
💡 نصيحة: يستخدم هذا البرنامج if-else (ستُغطى بالتفصيل في الدرس 06) — يمكنك نسخه حاليًا وفهم المنهج العام.
❓ أسئلة شائعة
int يخزن أعدادًا صحيحة (مثل 25، -3)، double يخزن أعداد فاصلة عائمة (مثل 19.99، 3.14). قاعدة عامة: عدّ/عمر/سنوات → int؛ سعر/طول/معدلات → double.char هو حرف واحد، يستخدم علامات اقتباس مفردة (مثل 'A')؛ string هي عدة أحرف، تستخدم علامات اقتباس مزدوجة (مثل "Hello"). لاحظ أن "A" و'A' نوعان مختلفان تمامًا.const كلمة مفتاحية في C++ مع فحص أنواع — أكثر أمانًا وموصى بها (مثل const double PI = 3.14159;). #define ماكرو بأسلوب C بدون فحص أنواع — غير موصى به.int Age = 25;.▶ مثال 3: تحويل الأنواع (صعوبة ⭐)
#include <iostream>
int main() {
int a = 5;
double b = 3.7;
// Implicit conversion
double c = a + b;
std::cout << "Implicit conversion: " << c << std::endl;
// Explicit conversion (C-style)
int d = (int)b;
std::cout << "C-style cast: " << d << std::endl;
// C++-style conversion
int e = static_cast<int>(b);
std::cout << "C++-style cast: " << e << std::endl;
return 0;
}
الخرج:
Implicit conversion:
C-style cast:
C++-style cast:
static_cast<T>() هي طريقة تحويل الأنواع الموصى بها في C++، أكثر أمانًا من الأسلوب C-style (T).
- المتغيرات هي "صناديق" في الذاكرة تستخدم لتخزين البيانات
- C++ لديها 5 أنواع بيانات أساسية:
int،double،char،bool،string - تعريف متغير:
Type variableName; - تهيئة متغير:
Type variableName = value;(التهيئة الموحدةType variableName{value};موصى بها) - الثوابت تُعرَّف بـ
const، قيمها لا يمكن تغييرها، ويجب تهيئتها - استخدم
cinللإدخال،coutللإخراج - أسماء المتغيرات يجب أن تكون ذات معنى وتتبع قواعد التسمية
📖 ملخص
- الأنواع الأساسية: int، double، char، bool
- تحويل الأنواع: static_cast، dynamic_cast
- auto: استنتاج تلقائي للنوع
- const: ثابت، لا يمكن تعديله
📝 تمارين
- أساسي (صعوبة ⭐):
اكتب برنامجًا يعرّف ثلاثة متغيرات:
name(string)،age(integer)،score(floating-point)، يعين قيمًا لكل منها، ويخرجها.
My name is Alice,this year 20 years old,FinalScore 92.5 points。
-
متوسط (صعوبة ⭐⭐): اكتب برنامجًا يتيح للمستخدم إدخال نصف قطر دائرة، ثم حساب وإخراج المحيط والمساحة (المحيط = 2πr، المساحة = πr²).
-
عرّف π كثابت (3.14159)
-
أخرج بمنزلتين عشريتين (تلميح: استخدم
std::fixedوstd::setprecision، يتطلب#include <iomanip>) -
تحدي (صعوبة ⭐⭐⭐): اكتب برنامجًا يحوّل درجة فهرنهايت إلى مئوية:
-
دع المستخدم يدخل درجة حرارة بالفهرنهايت
-
استخدم المعادلة C = (F - 32) × 5/9 لحساب الدرجة المئوية
-
أخرج النتيجة (منزلة عشرية واحدة)
-
مثال: إدخال 68، إخراج "68°F = 20.0°C"
- المتغيرات هي وحدات تخزين بيانات في الذاكرة؛ يجب تعريفها قبل الاستخدام
- أنواع C++ الأساسية: int (عدد صحيح)، double (فاصلة عائمة)، char (حرف)، bool (منطقي)، string (سلسلة نصية)
- طرق تهيئة المتغيرات: = إسناد / تهيئة موحدة {}
- الثوابت تُعرَّف بـ const؛ قيمها لا يمكن تعديلها ويجب تهيئتها
- قواعد التسمية: حروف/أرقام/شرطات سفلية، لا يمكن البدء برقم، حساسة لحالة الأحرف
9. 🚀 الخطوة التالية
الآن بعد أن تعلمت عن المتغيرات وأنواع البيانات، سنتعلم بعد ذلك العوامل في C++ (الدرس 04) — تمكين المتغيرات من إجراء العمليات الحسابية والمقارنات والأحكام المنطقية.