C Board  

Go Back   C Board > General Programming Boards > C++ Programming

Closed Thread
 
LinkBack Thread Tools Display Modes
Old 12-18-2006, 03:15 AM   #1
Registered User
 
Join Date: Sep 2006
Posts: 25
Custom String class gives problem with another prog.

This seems to work with the overloaded "<<" and ">>" operators placed in the header file, but complains about not being able to access pch even though its a friend function and i have no idea why its doing so. Main.cpp seems to not have any problems using this string class, but with another program it complains about the << and >> operators. Any ideas/suggestions?


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;
	}			
};
String.cpp as follows
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  
Old 12-18-2006, 03:40 AM   #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  
Closed Thread

Thread Tools
Display Modes

Forum Jump

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


All times are GMT -6. The time now is 10:47 AM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0 RC2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22