
06-09-2007, 15:12
|
 |
|
|
חבר מתאריך: 10.06.06
הודעות: 452
|
|
|
צריך את עזרתכם בתוכנית בC++
שלום כתבתי תוכנית ויש לי מספר שגיאות שאני לא ממש עולה אלהם אני מצרף כאן את המשימה וכולי תיקווה שתוכלו לעזור לי. כתבתי לצד כל פונקציה את מה שהיא אמורה לעשות ולגבי הדיבג אין לי מושג אני אשמח להבין איך אני אמור לבדוק את התוכניות איתו.
ישנן 3 צורות להגדרת מחרוזת תווים :
.unsigned size מצביע לתחילת המחרוזת ואורכה
מצביע לתחילת המחרוזת שבסופה מופיע '0\'.
מצביע לתחילת המחרוזת ומצביע לסופה.
.בהתאם לשלוש הצורות הנ"ל , הגדר את התורשה:1
String ( char * pStart )
/ | \
/ | \
Pointer_Size Pointer_Null Pointer_Point
(unsigned size) ( char * pEnd)
Pointer_Size , Pointer_Null, Pointer_Pointנתון מספר עצמים מסוגים
(ההגדרה שלהם דינאמית ) ומערך מצביעים אליהם .
הדפס כל עצם בצורתו (חובה להשתמש .בעזרת פונקציה הרלוונטית 2
ברב- צורתיות).
Pointer_Null הצמד את כל המחרוזות למחרוזת אחת מסוג . 3
את הפעולה "הצמדה" Pointer_Null למטרה זו הגדר ב-
.Point_Null& operator += ( const String & )
קוד:
#include <iostream>
#include <cassert>
#include <cstdlib>
using namespace std;
class String {
protected:
char *pstart;
public:
String();//constractor
String(char *start);//constractor
virtual void print()=0;//virtual print string
virtual unsigned int sizeOf()=0;//virtual length of string
char *startout(){return pstart;};
virtual ~String();
};
String::String()
: pstart(NULL)
{}
String::String(char *start)
: pstart(start)
{}
String::~String()
{
delete pstart;
pstart = NULL;
}
class Pointer_Size : public String {
private:
unsigned int size;
public:
Pointer_Size(char *p,unsigned int other);//constractor
virtual ~Pointer_Size();//distractor
virtual unsigned int sizeOf(){return size;};//return length of string
void print();//print string
};
Pointer_Size::Pointer_Size(char *p,unsigned int other)
: String(p), size(other)
{
}
void Pointer_Size::print()
{
for(unsigned int i=0 ;i<size;i++)
cout<<pstart[i];
}
Pointer_Size::~Pointer_Size() {
// DO NOT DELETE pstart - double delete
// remember, ~String() gets called after ~Pointer_Size()
}
class Pointer_Null : public String {
public:
Pointer_Null(char *p);//constractor
void print();
virtual unsigned int sizeOf();//return length of string
Pointer_Null operator+=(const string & s);//plusing one string to another
~Pointer_Null();
};
Pointer_Null::Pointer_Null(char *p)
: String(p)
{
}
unsigned int Pointer_Null::sizeOf()
{
unsigned int i;
for(i=0;string[i]!='\';i++)
return i;
}
Pointer_Null & Pointer_Null::operator+=(const strint & s)
{
int len=sizeOf()+s.sizeOf()+1;
char *presult=new char[len];
char * psecound=s.startout();
if (presult!=Null)
{if (pstart!=Null)
strcpy(presult,pstart);
else
strcpy(presult,"\");
strcat(presult,psecond);
cout<<endl<<"presult"<<presult<<endl;
if (pstart)
delete[] pstart;
}
return *this;
}
void Pointer_Null::print()
{
for(unsigned int i=0 ;pstart!='\';i++)
cout<<pstart[i];
}
Pointer_Null::~Pointer_Null() {
}
class Pointer_Point : public String {
private:
char * pEnd;
public:
Pointer_Point(char *p,char *other);//constractor
virtual unsigned int sizeOf();//counting the size of the string until *pEnd
void print();
virtual ~Pointer_Point();//distractor
};
Pointer_Point::Pointer_Point(char *p,char *other)
: String(p), pEnd(other)
{
}
void Pointer_Point::print()
{
for(unsigned int i=0 ;&pstart!=&pEnd;i++)
cout<<pstart[i];
}
Pointer_Point::~Pointer_Point()
{
delete pEnd;
pEnd = NULL;
}
unsigned int Pointer_Point::sizeOf()
{unsigned int i;
for(i=0;&this[i]!=&pEnd;i++)
;
return i;
}
int main()
{
String *p[3]={new Pointer_Size("hello",5),new Pointer_Null("bye")};
_____________________________________

לגלריה
|