النوع std::string والذي يدعى السلسلة النصية في العربية هو كائن يمثّل سلاسل من المحارف، ويوفر صنف string القياسي خيارًا بسيطًا وآمنًا ومتعدّد الاستخدامات لتخزين سلاسل المحارف ومعالجتها، وذلك موازنة بمصفوفات المحارف، وstring …
مثال بسيط
يحتوي المثال التالي على شيفرة يُراد تقسيمها إلى عدّة ملفّات مصدرية، سننظر الآن في كل ملف على حدة:
الملفات المصدرية
my_function.h
في هذا الملف، لاحظ أن الترويسة التالية تحتوي على تصريح للدالة ف…
تُستخدم فضاءات الأسماء (Namespaces) لمنع التضارب الذي قد يحدث عند استخدام عدّة مكتبات في نفس البرنامج، وفضاء الاسم سابقةٌ (prefix) تعريفية للدوالّ والأصناف والأنواع وغيرها.
ما هي فضاءات الاسم؟
فضاء الاسم في لغة ++C …
تُسمى الدوال المُعرّفة بالكلمة المفتاحية inline دوالًا مُضمّنة (inline functions)، ويمكن تعريفها أكثر من مرة دون انتهاك قاعدة التعريف الواحد (One Definition Rule)، وعليه يمكن تعريفها في الترويسة مع الارتباطات الخارجية.
…
الدوال الوهمية النهائية (Final virtual functions)
قدّمت C++ 11 المُحدِّد final الذي يمنع إعادة تعريف (overriding) تابع في حال ظهر في بصمته (signature):
class Base {
public:
virtual void foo() {
…
يمكن تعريف عوامل مثل + و -> في ++C من أجل استخدامها مع الأنواع المُعرّفة من قِبل المستخدم. فمثلًا، تعرِّف الترويسة العامل + لضمّ (concatenate) السلاسل النصية، وهذا ممكن عن طريق تعريف عامِل باستخدام الكلمة المفتاحية …
تصنيف كلفة تمرير وسيط إلى معامل
يقسم تحليل التحميل الزائد تكلفة تمرير وسيط (argument) إلى مُعامل (parameter) إلى 4 تصنيفات مختلفة، تُسمّى "تسلسلات" (sequences)، وقد يتضمن كل تسلسل صفرًا أو واحدًا أو عدّة تحويلات.
…
أساسيات الأصناف
الصنف (class) هو نوع يعرّفه المستخدم، ويُسبق بالكلمة المفتاحية class أو struct أو union، ويشير المصطلح "class" بشكل عام إلى الأصناف غير الاتحاديّة (non-union classes).
والصنف مؤلّف من أعضاء يمك…
الملكية الفريدة
الإصدار ≥ C++ 11
std::unique_ptr هو قالب صنف (class template) يُدير دورة حياة الكائنات المخزّنة ديناميكيًا، وعلى خلاف std::shared_ptr، فإنّ كل كائن ديناميكي يكون مملوكًا لمؤشّر حصري (std::unique_p…
المؤشّر هو عنوان يشير إلى موقع في الذاكرة، وتُستخدم المؤشرات عادة للسماح للدوالّ أو هياكل البيانات بالحصول على معلومات عن الذاكرة وتعديلها دون الحاجة إلى نسخ الذاكرة المشار إليها، والمؤشّرات قابلة للاستخدام سواءً مع الأنواع ا…
عامل الإسناد (Assignment Operator)
يُستخدم "عامل الإسناد" لإحلال بيانات كائن ما مكان بيانات كائن موجود سلفًا (مُهيّأ مُسبقًا). انظر المثال التالي:
// عامل الإسناد
#include <iostream>
#include <string>
us…
تتشابه المراجع في سلوكها وتختلف عن المؤشّرات الثابتة (const pointers)، وتُعرَّف عن طريق إتباع الرمز & (ampersand) باسم نوع.
int i = 10;
int &refi = i;
يمثّل refi في المثال أعلاه مرجعًا مربوطًا (reference …
تعريف الأصناف متعددة الأشكال
أبسط مثال لتوضيح مفهوم تعددية الأشكال (Polymorphism) أنه إنشاء لصنف مجرّد يصف الأشكال الهندسية، والذي يمكن أن نشتق منه المربّعات والدوائر وغيرها من الأشكال الأخرى.
الصنف الأب
لنبدأ …
استدعاء الدوال بالقيمة أو بالمرجع
هدف هذا القسم هو شرح الاختلافات من الناحية النظرية والعمليّة بخصوص ما يحدث لمعاملات الدوال عند استدعائها، وأيضًا قابلية إعادة استخدام المتغيرات وقيمها بعد استدعاء الدالة، إذ يمكن النظر إ…
الكلمات المفتاحية هي كلمات لها معنى محدّد في C++ ولا يمكن استخدامها كمُعرّفات، كذلك لا يجوز إعادة تعريف الكلمات المفتاحية باستخدام المعالج المُسبق (preprocessor) في أيّ وحدة ترجمة تتضمن ترويسة المكتبة القياسية. لكن بأي حال ف…
تشير البرمجة الوصفية (Metaprogramming) في C++ إلى استخدام وحدات الماكرو أو القوالب لتوليد شيفرة أثناء وقت التصريف (compile)، ويُفضّل استخدام القوالب بدلًا من وحدات الماكرو رغم أنّها أقلّ شمولية منها.
وغالبًا ما تستفيد ا…
case
تُدخِل كلمة case المفتاحية وسم حالة (case label) لتعليمة switch، وتنفّذ تعليمات معيّنة بناء على القيمة التي يساويها معامَلها. كذلك يجب أن يكون هذا المعامَل تعبيرًا ثابتًا ومطابقًا لشرط تعليمة switch. تنتقل تعليمة sw…
تستخدم لغة C++ مجاري التدفق لإدارة دخل وخرج الملفات، إذ تستخدم:
std::istream لقراءة النص.
std::ostream لكتابة النص.
std::streambuf لقراءة أو كتابة المحارف.
يستخدم الدَّخل المُنسّق (Formatted input…
مجرى الدخل الخاص بالمستخدم ومجرى الخرج القياسي (user input and standard output)
#include <iostream>
int main() {
int value;
std::cout << "Enter a value: " << std::endl;
std::cin >> val…
تنفذ الحلقات التكرارية مجموعة من التعليمات إلى حين استيفاء شرط معين، وهناك ثلاثة أنواع من تلك الحلقات التكرارية في لغة C++: for و while و do…while.
حلقة for النطاقية (Range-Based For)
الإصدار ≥ C++ 11
يمكن است…