I have to do a homework that requires operator overloading. It's very simple , but i think i forgot alot about operator overloading.
I need to make a premitive string-like class that only has overloaded + and = signs.
Here's the header file :
Code:
#ifndef STRTYPE_H
#define STRTYPE_H
class StrType
{
public :
StrType(char * = "\0");
StrType &operator=(const StrType &);
StrType operator+(const StrType &);
void print(void);
~StrType();
private :
char *ptr;
};
#endif
and the .cpp file :
Code:
#include <iostream>
using std::cout;
using std::endl;
#include <cstring>
#include "strtype.h"
StrType::StrType(char *str)
{
ptr = new char[strlen(str) + 1];
strcpy(ptr, str);
}
StrType &StrType::operator=(const StrType &right)
{
if( &right != this)
{
delete [] ptr; // error always occur here
ptr = new char[strlen(right.ptr) + 1];
strcpy(ptr, right.ptr);
}
return *this;
}
StrType StrType::operator+(const StrType &right)
{
char *temp = new char[strlen(right.ptr) + strlen(ptr) + 1];
strcpy(temp, ptr);
strcat(temp, right.ptr);
delete [] ptr;
ptr = new char[strlen(temp) + 1];
strcpy(ptr, temp);
delete [] temp;
return *this;
}
void StrType::print()
{
cout << ptr;
}
StrType::~StrType()
{
delete [] ptr;
}
Am i using the proper return types? My C++ book says that = should return a const reference of an object , but that doesn't make sense to me. Also , my operator= function always fail when trying to delete 'ptr' and show an error "debug assertion failed" in VC++. (hilighted in red)
I used to return a reference to an object in operator+ till i noticed that ' a = b + c + d' would modify objects b , c and d , so i let it return a copy of the object instead.
I just need help in those two operator's logic and return value.