Hi, what is wrong with my derived class called CaseString. The purpose of the class is to convert all the characters in a string object to both uppercase and lowercase without modifying the original string object (so that means I need to make a new object with all the modifications and I need to return that object and keep the original object untouched). The CaseString class is derived from the String class and the only extra thing that it can do is that it can convert the string to both upper and lower case. I have to make this class no matter how pointless it sounds. I know I could do this function in the String class but I need to make this CaseString class. I will post the code for the derived class below and any help will be greatly appreciated. Thanks.

Code:
//case.h

#ifndef CaseString_H
#define CaseString_H

#include <iostream>
#include "strdrv.h"
#include "string.h"


class CaseString: public String
{
private:
	char* lower_case;
	char* upper_case;
    String name;

public:
	CaseString();
    CaseString(const char *);
	CaseString(const CaseString &rhs);
	~CaseString();
	CaseString& operator =(const CaseString &rhs);
    void print();

 };

#endif


// case.cpp	
#define _CRT_SECURE_NO_DEPRECATE 1	
#include <iostream>
#include <assert.h>
#include <cctype>
#include <algorithm>
#include "case.h"

using namespace std;

CaseString::CaseString()
{
	lower_case = new char[size];
	upper_case = new char[size];
	memset(lower_case, 0, size);
	memset(upper_case, 0, size);
}


CaseString::CaseString(const char *str)
{
    lower_case = new char[size];
	upper_case = new char[size];
	for (int i = 0; i <= stringlength; ++i )
	{
		lower_case[i] = tolower(lower_case[i]);
		upper_case[i] = toupper(upper_case[i]);
	}

}

CaseString::CaseString(const CaseString &rhs)
{
	lower_case = new char[size];
	upper_case = new char[size];
	for (int i = 0; i <= rhs.getLength(); ++i )
	{
		lower_case[i] = tolower(lower_case[i]);
		upper_case[i] = toupper(upper_case[i]);
	}

}

CaseString::~CaseString()
{
	delete []lower_case;
	delete []upper_case;
}

CaseString& CaseString::operator =(const CaseString &rhs)
{
	lower_case = rhs.lower_case;
	upper_case = rhs.upper_case;
	return *this;
}

void CaseString::print()
{
	printf("%s: %s(%d)\n", name, buf, stringlength);
	printf("%s: %s(%d)\n", name, lower_case, stringlength);
	printf("%s: %s(%d)\n", name, upper_case, stringlength);
}