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

c

المصفوفات كعناصر للفئات

في البرنامج الثاني سوف نعدل برنامج objpart.cpp لندخل اسم القطعة كعبارة نصية :

strpart.cpp


 


// strpart.cpp


// string used in widget part object


#include <iostream.h>


#include <string.h>       // for strcpy()


#include <conio.h>


 


class part


   {


   private:


      char partname[30];  // name of widget part


      int partnumber;     // ID number of widget part


      float cost;         // cost of part


   public:


      void setpart(char pname[], int pn, float c)


     {


     strcpy(partname, pname);


     partnumber = pn;


     cost = c;


     }


      void showpart()                        // display data


     {


     cout << "\nName="   << partname;


     cout << ", number=" << partnumber;


     cout << ", cost=$"  << cost;


     }


   getche();


   };


 


void main()


   {


   part part1, part2;                        


                      


   part1.setpart("handle bolt", 4473, 217.55);


   part2.setpart("start lever", 9924, 419.25);


   cout << "\nFirst part: ";  part1.showpart();


   cout << "\nSecond part: "; part2.showpart();


   }




ينشئ البرنامج كائنين , part1, part2 من الفئة part ويدخل لهما القيم الخاصة بهما عن طريق الدالة setpar() المنتمية للفئة , ثم يظهر تلك القيم عن طريق الدالة المنتمية showpart() ويكون إدخال القيم للكائن عن طريق استخدم دالة نسخ العبارات النصية srecopy() , لنسخ اسم القطعة من معامل الدالة إلي المصفوفة الخاصة باسم الكائن .



وبالإضافة إلي الدالتين strcpy() و strlen() التي قدمناها كمثالين لدوال التعامل مع العبارات النصية , توجد العديد من الدوال لأداء العديد من الوظائف المتعلقة بالعبارات النصية ويمكن الرجوع لنشرة بورلاند لمعرفتها .



النوع string من وضع المستخدم



ذكرنا أن لغة السي لا تحتوي علي النوع string كما في اللغات الأخري , وقد يكون من المفيد أن يضع المستخدم بنفسه هذا النوع , مستخدما إمكانية البرمجة الكائنية , كما نفعل في البرنامج التالي :






strobj.cpp


 


// strobj.cpp


// a string as a class


// UCS Laboratories


#include <iostream.h>


#include <string.h>      // for strcpy(), strcat()


#include <conio.h>


 


const int SZ = 80;       // size of all Strings


 


class String


   {


   private:


      char str[SZ];


   public:


      String()                           // constructor, no args


     { str[0] = '\0'; }


      String( char s[] )                 // constructor, one arg


     { strcpy(str, s); }


      void display()                     // display string


         { cout << str; }


      void concat(String s2)             // add arg string to


    {                                // this string


    if( strlen(str)+strlen(s2.str) < SZ )


       strcat(str, s2.str);


    else


       cout << "\nString too long";


    }


   };


 


void main()


   {


   String s1("Merry Christmas!  ");      // uses constructor 2


   String s2 = "Season's Greetings!";    // alternate form of 2


   String s3;                            // uses constructor 1


 


   cout << "\ns1="; s1.display();        // display them all


   cout << "\ns2="; s2.display();


   cout << "\ns3="; s3.display();


 


   s3 = s1;                              // assignment


   cout << "\ns3="; s3.display();        // display s3


 


   s3.concat(s2);                        // concatenation


   cout << "\ns3="; s3.display();        // display s3


   getche();


   }




وقد حددنا في البرنامج فئة string تحتوي علي عنصر بيانات واحد هو مصفوفة المحارف str[] , وينتمي للفئة أربعة دوال بادئة تعمل علي وضع المحرف الصفري في المصفوفة وبادئة تعمل علي ملء المصفوفة بالعبارة المطلوبة , استخدمنا فيه الدالة المكتبية strcpy() ودالة لإظهار العبارة النصية , والرابعة لضم العبارات النصية بعضها للبعض , استخدمنا فيها دالة مكتبية جديدة , هي contact() ثم أنشأنا ثلاثة كائنات تنتمي لهذه الفئة , s1, s2, s3 .



وقد كان البرنامج الأصلي أعطينا الكائن الأول العبارة الأولي بالأمر :



String s1 (''merry chrismass!'');



ومن الممكن استخدم الأمر التقليدي :



String s1 = ''merry chrismass!''



وأعطينا الكائن الثاني عبارته بنفس الطريقة , وقد تولت البادئة الثانية إعطاء هذين الكائنين قيمهما , أما الكائن الثالث فقد ترك للبادئ الأول ليملأه بالمحرف الصفري . ومن ثلاثة أوامر أظهرنا محتوي الكائن الثلاثة , ومن البديهي أن يكون الكائن الثالث فارغا . أما ما كسبناه من كوننا جعلنا هذه المصفوفة كائنا , فهو إمكانية استخدام مؤثر التخصيص لكي نجعل عبارة نصية تساوي الأخري , كالتالي :



S3=s1;



وهو ما لم يكن متاحا من قبل .



وفي الجزء الثاني من البرنامج استخدمنا دالة الوصل لكي تصل بين الكائنات , مستخدمين الدالة المنتمية الرابعة . ومن الممكن أن نضيف للفئة ما نشاء من دوال مكتبية , فنزيد من إمكانيات التعامل مع كائناتها .

تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

الرسم Graphics

دوال النمط الرسومي في ++C