I am currently writing my own String class. Here is the header
#pragma once
class String
{
private:
char* m_Beginning;
int m_Length;
public:
// Constructors
String();
String(const String&);
String(const char*);
// Destructor
~String();
// Operations
String& operator=(const String&);
String operator+(const String&)const;
String& operator+=(const String&);
char operator[](int _Index)const;
// Methods
void Append(const String&);
String Concatenate(const String&)const;
int Length()const { return m_Length; };
void Clear();
};
And here is the class description
#include "String.h"
#include <cstring>
#include <iostream>
String::String()
{
m_Beginning = nullptr;
m_Length = 0;
}
String::String(const String& _String)
{
m_Length = _String.Length();
m_Beginning = new char[m_Length];
for (int i = 0; i < m_Length; ++i)
{
m_Beginning[i] = _String[i];
}
}
String::String(const char* _String)
{
m_Length = strlen(_String);
m_Beginning = new char[m_Length];
for (int i = 0; i < m_Length; ++i)
{
m_Beginning[i] = _String[i];
}
}
String::~String()
{
delete[] m_Beginning;
}
String& String::operator=(const String& _String)
{
Clear();
m_Length = _String.Length();
m_Beginning = new char[m_Length];
for (int i = 0; i < m_Length; ++i)
{
m_Beginning[i] = _String[i];
}
return *this;
}
String String::operator+(const String& _String)const
{
String NewString(*this);
NewString += _String;
return NewString;
}
String& String::operator+=(const String& _String)
{
for (int i = 0; i < _String.Length(); ++i)
{
m_Beginning[m_Length + i] = _String[i];
}
m_Length += _String.Length();
return *this;
}
char String::operator[](int _Index)const
{
return m_Beginning[_Index];
}
void String::Append(const String& _String)
{
*this += _String;
}
String String::Concatenate(const String& _String) const
{
return (*this + _String);
}
void String::Clear()
{
delete[] m_Beginning;
m_Beginning = nullptr;
m_Length = 0;
}
The thing I want to ask is how to override the operator [] so that I set a value to a certain cell, not just extract it.
str("ABCD");
str[2] = 'Z'; // and str will become "ABZD".
Thank you :)