您的位置:首页 > 编程语言 > C语言/C++

c++运算符重载

2017-07-11 16:50 204 查看
话不多说,直接撸码,其中原理相信很容易看懂!!!

#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)
4000
;//与字符相加
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  运算符重载