欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > DAY5 C++运算符重载

DAY5 C++运算符重载

2024/12/22 0:57:29 来源:https://blog.csdn.net/m0_69965956/article/details/144431892  浏览:    关键词:DAY5 C++运算符重载

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知识点:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com