المصفوفات كعناصر للفئات في ++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;
وهو ما لم يكن متاحا من قبل .
وفي الجزء الثاني من البرنامج استخدمنا دالة الوصل لكي تصل بين الكائنات , مستخدمين الدالة المنتمية الرابعة . ومن الممكن أن نضيف للفئة ما نشاء من دوال مكتبية , فنزيد من إمكانيات التعامل مع كائناتها .
تعليقات
إرسال تعليق