DAY5 C++运算符重载

ops/2024/12/16 1:17:19/

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


http://www.ppmy.cn/ops/142253.html

相关文章

杨振宁大学物理视频中黄色的字,c#写程序去掉(原版改进,三)

上一节&#xff0c;我们分清了主次矛盾&#xff0c;并搞定了主要矛盾&#xff08;去掉黄色的字&#xff09;&#xff0c;这一节解决次要矛盾&#xff08;矩形色带&#xff09;。 我们的想法如图&#xff1a; 1&#xff0c;我们找到稳定黄色的最左边&#xff0c;最右边两点&…

ElementEye,网页分析器

介绍 我们经常使用Python写爬虫&#xff0c;爬到网页数据之后&#xff0c;就需要用beautifulSoup进行解析。因为写爬虫并不是我的主营工作&#xff0c;大多数只是用来分析一下想要的数据而已&#xff0c;所以经常会忘记beautifulSoup的用法。 同时&#xff0c;我们总是分析页面…

动手学深度学习-线性神经网络-softmax回归

目录 分类问题 网络架构 全连接层的参数开销 softmax运算 小批量样本的矢量化 损失函数 对数似然 softmax及其导数 交叉熵损失 信息论基础 熵 信息量 重新审视交叉熵 模型预测和评估 小结 在上上上一节中我们介绍了线性回归。 随后&#xff0c;然后在上上一节中…

java实现word转换pdf,word文件转换pdf文件,java如何将word转换pdf

1.java依赖 <dependency><groupId>com.aspose.cells</groupId><artifactId>aspose-cells</artifactId><version>8.5.2</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>…

树的遍历【东北大学oj数据结构7-3】C++

题面 二叉树是递归定义的。 二叉树 T 是定义在有限节点集上的结构 不包含节点&#xff0c;或者由三个不相交的节点集组成&#xff1a; 一个根节点。称为左子树的二叉树。称为右子树的二叉树。 您的任务是编写一个程序&#xff0c;该程序基于以下算法执行树遍历&#xff08;系…

【jvm】GC Roots有哪些

目录 1. 说明2. 虚拟机栈&#xff08;栈帧中的局部变量表&#xff09;中的引用3. 方法区中的类静态属性引用4. 本地方法栈&#xff08;Native方法栈&#xff09;中JNI&#xff08;Java Native Interface&#xff09;的引用5. 活跃线程&#xff08;Active Threads&#xff09;6.…

网络编程02

1. 回显服务器——UDP 一个 UDP 的客户端/服务器通信的程序——回显服务器&#xff08;echo server&#xff09;&#xff1a; 这个程序只是单纯地调用 Socket API 1&#xff09;让客户端给服务器发送一个请求&#xff0c;请求就是从控制台输入的字符串 2&#xff09;服务器…

Layer Norm 提升训练稳定性的原理:解决权重初始值敏感性问题(中英双语)

Layer Norm 提升训练稳定性的原理与数值模拟 在深度学习模型中&#xff0c;权重初始值对训练过程的稳定性影响极大&#xff0c;尤其在深层网络和长序列任务中&#xff0c;初始值不当会导致梯度消失或爆炸的问题&#xff0c;进而导致训练不稳定。Layer Normalization (Layer No…