![]() |
| | #1 |
| Registered User Join Date: Sep 2006
Posts: 25
| Custom String class gives problem with another prog. String.h as follows Code: #include <stdlib.h>
class String{
private:
char *pch; //Pointer to a CHar array
int length;
static char nul;
public:
String();
String(char *p);
String(String const &s);
~String();
bool operator == (String s2) const;
String operator = (String &s);
String operator + (String &s) const;
//friend ostream& operator << (ostream &os, String &s);
//friend istream& operator >> (istream &is, String &s); - I would put these in string.cpp but the compiler complains about not being able to access pch
friend ostream& operator << (ostream &os, String &s)
{
os << s.pch;
return os;
}
friend istream& operator >> (istream &is, String &s)
{
if(s.pch != &String::nul) delete[] s.pch;
char *ptemp = new char[1000];
is.getline(ptemp, 1000, '\n');
s.length = strlen(ptemp);
s.pch = new char [s.length +1];
strcpy(s.pch, ptemp);
return is;
}
};
Code: #include <iostream>
#include <stdlib.h>
using namespace std;
#include "String.h"
char String::nul = '\0';
//default constructor
String::String()
{
pch = 0;
length = 0;
}
String::String(char *p)
{
if( p == 0 ){abort();}
length = strlen(p);
pch = (char*) malloc(length+1);
strcpy(pch, p);
}
//copy constructor
String::String(String const &str)
{
if (str.pch==0){
pch = 0;
length = 0;
} else{
length = str.length;
pch = (char*) malloc(length+1);
strcpy(pch, str.pch);
}
}
//destructor
String::~String()
{
delete[] pch;
}
//overloaded '=='
bool String::operator == (String s2) const
{
if ( strcmp(pch, s2.pch) == 0 ) return true;
else{
return false;
}
}
String String::operator = (String &s)
{
String temp (s.pch);
if (s.length > length) {delete [] pch;} //free old memory
pch = new char[s.length];
length = s.length;
}
strcpy (pch, s.pch);
strcpy (temp.pch, s.pch);
return temp;
}
//overloaded '+'
String String::operator + (String &s) const
{
String temp;
temp.length = length + s.length;
if(temp.length == 0) return temp;
temp.pch = new char[temp.length +1];
strcpy(temp.pch, pch);
strcat(temp.pch, s.pch);
return temp;
}
Test module: Code: #include <iostream>
#include "String.h"
using namespace std;
int main()
{
String s1, s3;
String s2("This is a String");
cout << "Input a String: " << endl;
cin >> s1;
s1 = s2;
if (s1 == s2)
{
cout << "s1 is equal to s2" << endl;
}
s3 = s1 + s2;
cout << s3 << " = " <<s1 << " + " << s2 << endl;
return 0;
}
|
| I BLcK I is offline |
| | #2 |
| Registered User Join Date: Sep 2006
Posts: 25
| ack srry bout the double post i thought i lost all i typed when i hit the post thread button and got some Invalid thread specified error and thought "ahhh shhhhhht" >< id prefer this one to be used: Custom String class gives problem with another prog. |
| I BLcK I is offline |
![]() |
| Thread Tools | |
| Display Modes | |
|
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| String Class | BKurosawa | C++ Programming | 117 | 08-09-2007 01:02 AM |
| Screwy Linker Error - VC2005 | Tonto | C++ Programming | 5 | 06-19-2007 02:39 PM |
| Problem with my NULL-terminated string class | elfjuice | C++ Programming | 3 | 02-25-2006 10:39 PM |
| how get string vector from class in file? | tord | C++ Programming | 3 | 06-17-2005 09:58 AM |
| Abstract class problem | VanJay011379 | C++ Programming | 9 | 07-31-2002 01:30 PM |