المشاركات

إعادة التوجيه في ++C

صورة
البرامج التالية يتم تشغيلها من محث الدوس يمكن كتابة وقراءه بيانات للملفات عن طريق كل من cin , cout والمعرفين أصلا ليتعاملا مع الشاشة ولوحة المفاتيح . ولكن هذان الكائنان قابلين أيضا لإعادة التوجيه لكي تمثل ملفا لقرص . وإعادة اللغة ذاتها , ومن المثير أن نري كيف يعمل . إليك أولا البرنامج التالي . redir.cpp   // redir.cpp // demonstrates redirection // syntax: redir <source >destination #include <iostream.h> #include <iomanip.h> // for resetiosflags() #include <conio.h>   void main() { char ch; while ( !cin.eof() ) // quit on EOF { cin >> resetiosflags(ios::skipws) // keep whitespace >> ch; // read from std input cout << ch; // send to std output } getche(); } وقد أبطلنا عمل الراية skipws حيث إن الوضع الابتدائي للكائن cin هو تجاوز المسافات البيضاء , والتي تتضمن ا...

الذاكرة ككائن للتدفق في ++C

صورة
الذاكرة ككائن للتدفق يمكننا أن نعامل مساحة معينة من الذاكرة ككائن تدفق ندخل فيها بيانات بالضبط كما نفعل مع ملف , وهي إمكانية مفيدة في حالة الرغبة في تشكيل الخرج علي صورة معينة (كأن تخرج الأعداد بعددين عشريين فقط) , ولكنك تريد أيضا أن تستخدم الدوال المخرجة للنصوص التي تتطلب عبارات نصية كمدخلات . هذا المطلب شائع بالنسبة للواجهات الرسومية GUI . وهناك عائلة من فئات التدفقات تتعامل مع هذا النوع من التشكيل داخل الذاكرة فللخرج لدينا الفئة ostrstream المشتقة من ostream (مع أشياء أخري ) , وللإدخال لدينا istrsteam المشتقة من istream ولكائنات الذاكرة لدينا strstream المشتقة من iostream للإدخال والإخراج . والشئ الغالب أن تحتاج إلي ostream وفي مثالنا نبين لك كيف يكون ذلك . سوف نبدأ بإنشاء ذاكرة مرحلية للبايتات , ثم كائن منتم إلي ostrsteam مستخدمين الذاكرة المرحلية buff وحجمها كمعاملين لبادئة التدفق . والأن يمكننا إخراج النص المهيأ إلي الذاكرة المرحلية كما لو كان كائنا لتدفق , وإليك صياغة البرنامج . ostrstr.cpp   // ostrstr.cpp // writes formatted data into memory   ...

زيادة تحميل مؤثرات الإدخال والإخراج في ++C

صورة
زيادة تحميل مؤثرات الإدخال والإخراج ننتقل الأن إلي موضوع أخر متعلق بالتدفقات , زيادة تحميل مؤثري الإدخال والإخراج , وهي أداة من الأدوات القوية للسي++ , فيها يمكنك أن تشكل إخراج الكائنات التي عرفتها علي الصورة الملائمة لها مباشرة دون أن تتجشم عبء دالة مخصوصة للإظهار , علي غرار الدالة display() التي كانت قاسما مشتركا في كافة برامجنا المتعلقة بالمسافات الإنجليزية . ويبين لك البرنامج التالي هذه الإمكانية . englio.cpp   // englio.cpp // overloaded << and >> operators // UCS Laboratories   #include <iostream.h> #include <conio.h>   class Distance // English Distance class { private : int feet; float inches; public : Distance() // constructor (no args) { feet = 0; inches = 0.0; } Distance( int ft, float in ) // constructor (two args) { feet = ft; inches = in ; } friend istream& operator >> (is...

مؤشرات الملفات في ++C

صورة
مؤشرات الملفات كل كائن لملف يتضمن رقمين , يسميان " مؤشر القراءة ومؤشر الكتابة get pointer , put pointer " , كما قد يسميا current get position موضع القراءة الحالة " , و current put position " موضع الكتابة الحالي " , أو اختصارا current position " الوضع الحالي " يحدد الرقمان بداية القراءة والكتابة . والوضع الغالب للقراءة هي من أول الملف إلي نهايته , أما الكتابة فقد يقصد أن تكون من بداية الملف بحيث تمحو الكتابة الجديدة القديمة , أو من نهاية الملف , وذلك في حالة الإلحاق حيث تفتح الملف مستخدمين البتة ios::app . ولكن قد تثور الحاجة لتحديد موضع معين للكتابة أو للقراءة عندئذ نريد التحكم في مؤشرات الموضع , عندئذ نستخدم الدوال التي تمكننا من ذلك , وهي الدالتان seekg(),tellg() , وseekp(), tellp() للكتابة , كما سوف نشرح فيما يلي . تحديد المواضع قدمنا لمثال لتحديد بالدالة seekg() عن طريق معامل وحيد , يحدد الموضع في بداية الملف . ولهذه الدالة حالة أخري , يكون لها معاملان , أحدهما يحدد مسافة يقال لها " الإزاحة offset " والثاني يحدد النقطة المنسوب ...

عمليات الكائنات في ++C

صورة
عمليات الكائنات نتولي في المقالات التالية شرح عمليات الإدخال والإخراج حين تجري علي كائنات كتابة عناصر كائن في قرص سوف نستخدم الكائن person الذي استخدمناه في أمثلة سابقة ولكتابة الكائنات نستخدم عموما النمط الثنائي , وهو الذي يضمن لنا أن يتم التعامل مع الأعداد بالطريقة الملائمة . وفي البرنامج التالي سوف يطلب من المستخدم أن يدخل بيانات تدخل في كائن من الفئة person ثم يكتب الكائن في الملف PERSON.DAT الذي يخزن علي القرص .   opers.cpp   // opers.cpp // saves person object to disk #include <fstream.h> // for file streams #include <conio.h>   class person // class of persons { protected : char name[40]; // person's name int age; // person's age public : void getData( void ) // get person's data { cout << "Enter name: " ; cin >> name; cout <...