1.类实现> 、<、!=、||、!和后自增、前自减、后自减运算符的重载
代码:
#include <iostream>using namespace std;
class Complex
{int rel;int vir;
public:Complex(){};Complex(int rel,int vir):rel(rel),vir(vir){cout << "有参构造" << endl;}bool operator>(const Complex other);bool operator<(const Complex other);bool operator!=(const Complex other);bool operator||(const Complex other);bool operator!();Complex operator++();Complex operator--();friend Complex operator++(Complex &other,int);friend Complex operator--(Complex &other,int);void show();
};
bool Complex::operator>(const Complex other)
{return rel>other.rel && vir >other.vir;
}
bool Complex::operator<(const Complex other)
{return rel<other.rel && vir<other.vir;
}
bool Complex::operator!=(const Complex other)
{return (rel!=other.rel) || (vir!=other.vir);
}
bool Complex::operator||(const Complex other)
{return (rel||vir) || (other.rel||other.vir);
}
bool Complex::operator!()
{return !(rel&&vir);
}
Complex Complex::operator++()
{Complex temp;temp.rel=++this->rel;temp.vir=++this->vir;return temp;
}
Complex Complex::operator--()
{Complex temp;temp.rel=--this->rel;temp.vir=--this->vir;return temp;
}
Complex operator++(Complex &other,int)
{Complex temp;temp.rel=other.rel++;temp.vir=other.vir++;return temp;
}
Complex operator--(Complex &other,int)
{Complex temp;temp.rel=other.rel--;temp.vir=other.vir--;return temp;
}
void Complex::show()
{cout << rel << "+" << vir << "i" << endl;
}
int main()
{Complex s(1,3);Complex p(5,6);Complex ss;bool rrr=(s<p);cout << rrr << endl;s=++p;ss=p++;s.show();ss.show();return 0;
}
2.My_string类中的+,==,>运算符重载
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char c = '\0';
class My_string
{char *str; //记录C风格的字符串int size; //记录字符串长度
public://无参构造My_string():str(new char('\0')),size(0){cout << "无参构造" << endl;}//有参构造My_string(const char *s):str(new char[strlen(s)+1]),size(strlen(s)+1)//分配足够的空间来接收字符串,将接收到的字符串赋值给str{strcpy(this->str,s);cout << "有参构造" << endl;}//拷贝构造My_string(const My_string &other):str(new char[other.size+1]){strcpy(this->str,other.str);this->size=other.size;cout << "拷贝构造" << endl;}//拷贝赋值My_string &operator=(const My_string &other){delete []str;str = new char[other.size+1];strcpy(this->str,other.str);this->size = other.size;cout << "拷贝赋值" << endl;return *this;}char *operator+(const My_string other);bool operator==(const My_string other);bool operator>(const My_string other);//析构函数~My_string(){delete []str;cout << "析构函数" << endl;}//at函数char &my_at(int num);
};
char *My_string::operator+(const My_string other)
{char *buff=new char[strlen(str)+strlen(other.str)+1];strcpy(buff,str);strcat(buff,other.str);buff[strlen(buff)]='\0';return buff;
}
bool My_string::operator==(const My_string other)
{if(strcmp(this->str,other.str)==0){return 1;}else{return 0;}
}
bool My_string::operator>(const My_string other)
{if(strcmp(this->str,other.str)>0){return 1;}else{return 0;}
}
char &My_string::my_at(int num)
{if(num>=size||num<0){cout<< "越界访问" << endl;return c;}else{return str[num];}
}
int main()
{My_string s="abcde";My_string s1="123";My_string s2="abcde";cout << s.my_at(0) << endl;cout << s.my_at(4) << endl;cout << s.my_at(5) << endl;cout << endl;cout << (s1>s) << endl;cout << endl;cout << (s==s2) << endl;cout << endl;cout << (s+s1) << endl;cout << endl;return 0;
}
Xmind知识点: