c++运算符重载

来源:互联网 发布:直男癌语录知乎 编辑:程序博客网 时间:2024/06/05 09:25

话不多说,直接撸码,其中原理相信很容易看懂!!!


#include<iostream>
using namespace std;

class string1
{
public:
string1();//默认构造函数
string1(int n,char c);//普通构造函数
string1(const char* source);//普通构造函数
string1(const string1& s);//复制构造函数
string1& operator =(char* s);//重载=,实现字符串的赋值
string1& operator = (const string1& s);//重载=,实现对象赋值
~string1();
char& operator[](int i);//重载[],实现数组运算
const char& operator[](int i)const;//重载[],实现数组运算(对象为常量)
string1& operator +=(const string1& s);//与字符相加
string1& operator +=(const char* s);//与对象相加
friend ostream& operator <<(ostream& out,string1& s);//实现输出流
    friend istream& operator >>(istream& in,string1& s);//实现输入流
friend bool operator <(const string1& left,const string1& right);
    friend bool operator >(const string1& left,const string1& right);
friend bool operator ==(const string1& left,const string1& right);
friend bool operator !=(const string1& left,const string1& right);
char* getData();
private:
int size;
char *data;
};


string1::string1()
{
data = new char[1];
size = 0;
*data = '\0';
}


string1::string1(int n,char c)
{
data = new char[n+1];
size = n;
char* temp = data;
while(n--)
{
*temp++ = c; //*temp = c;temp++;
}
*temp = '\0';
}


string1::string1(const char* source)
{
if(source == NULL)
{
data = new char[1];
*data = '\0';
size = 0;
}
else
{
size = strlen(source);
data = new char[size+1];
strcpy(data,source);
}
}


string1::string1(const string1 &s)
{
data = new char[s.size+1];
strcpy(data,s.data);
size = s.size;
}


string1& string1:: operator=(char* s)
{
if(s != NULL)
{
delete []data;
}
size = strlen(s);
data = new char[size+1];
strcpy(data,s);
return *this;
}


string1::~string1()
{
if(data != NULL)
{
delete []data;
data = NULL;
size = 0;
}
}


char& string1::operator [](int i)
{
return data[i];
}


const char& string1::operator[] (int i)const
{
return data[i];
}


string1& string1::operator+=(const string1& s)
{
int len = size+s.size+1;
char* temp = data;
data = new char[len];
size = len-1;
strcpy(data,temp);
strcat(data,s.data);
delete []data;
return *this;
}


string1::length()
{
return size;
}


ostream& operator <<(ostream &out,string1& s)
{
for(int i=0;i<s.length();i++)
{
out<<s[i]<<" ";
}
return out;
}


istream& operator >>(istream &in,string1 &s)
{
char p[50];
in.getline(p,50);
s = p;
return in;
}


bool operator < (const string1& left,const string1& right)
{
int i=0;
while(left[i]==right[i] && left[i]!=0 && right[i]!= 0)
{
i++;
}
return left[i]-right[i] < 0?true:false;
}

原创粉丝点击