2024/4/26 C++day4

1在Complex类的基础上,完成^,>>,<<,~运算符的重载

#include <iostream>
using namespace std;
class Complex
{int rel;    //实部int vir;    //虚部
public:Complex(){}Complex(int rel,int vir):rel(rel),vir(vir){}void show(){cout << this->rel << "+" << this->vir << "i" << endl;}friend Complex operator-(const Complex c1,const Complex c2);friend Complex operator/(const Complex c1,const Complex c2);friend bool operator==(const Complex c1,const Complex c2);friend Complex operator++(Complex &c1,int);friend ostream &operator<<(ostream &out,Complex c1);friend istream &operator>>(istream &in,Complex &c1);Complex operator~() const {  return Complex(-rel, -vir);  } Complex operator^(const Complex& other) const {  // 实部相减,虚部相加  return Complex(rel - other.rel, vir + other.vir);  }  //成员函数版实现+运算符重载Complex operator+(const Complex c1);//成员函数版实现*运算符重载Complex operator*(const Complex c1);//成员函数版%运算符重载Complex operator%(const Complex c1);//         <<friend ostream &operator<<(ostream &out,Complex c1);//         >>friend istream &operator>>(istream &in,Complex c2);//成员函数版>运算符重载bool operator>(const Complex c1);bool operator!();//成员函数版的前自增运算重载,单目运算符,成员函数版运算符重载无需传参Complex operator++(){++this->rel;++this->vir;return *this;}//成员函数版()运算符的重载operator int(){return this->rel;}
//    operator double()
//    {
//        return 0.9;
//    }
//    operator char()
//    {
//        return 'a';
//    }//使用operator()实现仿函数的功能int operator()(int a,int b){return  a>b?a:b;}void operator()(){cout << "这是一个仿函数" << endl;}
};
//成员函数版的!运算符重载
bool Complex::operator!()
{return !(this->rel||this->vir);
}
bool Complex::operator>(const Complex c1)
{return this->rel>c1.rel;
}
ostream &operator<<(ostream &out,Complex c1){out<<c1.rel<<"+"<<c1.vir<<"i"<<endl;return out;
}
istream &operator>>(istream &in,Complex c2){in>>c2.rel>>c2.vir;return in;
}
Complex Complex::operator%(const Complex c1)
{Complex temp;temp.rel = this->rel%c1.rel;temp.vir = this->vir%c1.vir;return temp;
}
Complex Complex::operator*(const Complex c1)
{Complex temp;temp.rel = this->rel*c1.rel;temp.vir = this->vir*c1.vir;return temp;
}
Complex Complex::operator+(const Complex c1)
{//实例化了一个temp类对象,并调用了有参构造//Complex temp(this->rel+c1.rel,this->vir+c1.vir);Complex temp;temp.rel = this->rel+c1.rel;temp.vir = this->vir+c1.vir;return temp;
}
//全局函数版本的-运算符重载
Complex operator-(const Complex c1,const Complex c2)
{//实例化一个类对象,用于返回运算后的结果Complex temp;temp.rel = c1.rel-c2.rel;temp.vir = c1.vir-c2.vir;return temp;
}
//全局函数版/运算符重载
Complex operator/(const Complex c1,const Complex c2)
{Complex temp;temp.rel = c1.rel/c2.rel;temp.vir = c1.vir/c2.vir;return temp;
}
//全局函数版本==运算符重载
bool operator==(const Complex c1,const Complex c2)
{return c1.rel==c2.rel&&c1.vir==c2.vir;
}
//全局函数版后自增运算符重载
Complex operator++(Complex &c1,int)
{Complex temp(c1.rel++,c1.vir++);return temp;
}
//全局函数版<<运算符重载,
//参数是ostream类对象的引用,返回值也是ostream类对象的引用
ostream &operator<<(ostream &out,Complex c1)
{out << c1.rel << "+" << c1.vir << "i" << endl;return out;
}
//全局函数版>>运算符重载,传类对象的引用,因为需要把输入保存在类对象中
istream &operator>>(istream &in,Complex &c1)
{in >> c1.rel >>c1.vir;return in;
}
  1. 在昨天作业myString类的基础上,完成+、关系运算符、逻辑运算符、输入输出运算符的重载

#include <iostream>
#include <cstring>
using namespace std;
class myString
{private:char *str;          //记录c风格的字符串int size;            //记录字符串的实际长度public://运算符重载friend myString operator+(const myString s1,const myString s2);//+friend ostream &operator<<(ostream &out,myString s1);//左移friend istream &operator>>(istream &in,myString &s1);//右移//>、<、==、!=关系运算符重载friend bool operator>(const myString s1,const myString s2);friend bool operator<(const myString s1,const myString s2);friend bool operator==(const myString s1,const myString s2);friend bool operator!=(const myString s1,const myString s2);//无参构造myString() : str(new char[1]), size(0){str[0] = '\0';//cout<<"无参构造"<<endl;}//有参构造myString(const char* s){size = strlen(s);str = new char[size + 1];strcpy(str, s);//cout<<"有参构造"<<endl;}myString(string s1){size = s1.size();str = new char[size + 1];strcpy(str, s1.c_str());// cout<<"有参构造"<<endl;}//拷贝构造myString(const myString &other){size = other.size;str = new char[size + 1];strcpy(str, other.str);//cout<<"拷贝构造"<<endl;}//拷贝赋值函数myString& operator=(const myString &other){if (this != &other) {delete[] str;size = other.size;str = new char[size + 1];strcpy(str, other.str);//cout<<"拷贝赋值"<<endl;}return *this;}//析构函数~myString(){delete[] str;//cout<<"析构"<<endl;}//判空函数bool empty(){return size==0;}//size函数void mysize(){cout<<"size = "<<size<<endl;}//c_str函数char* c_str(){return str;}//at函数char &at(int pos){if (pos < 0 || pos >= size) {cout<<"位置不合法"<<endl;}return str[pos];}};
//+
myString operator+(const myString s1,const myString s2)
{myString temp;temp.size = s1.size+s2.size;temp.str=strcpy(temp.str,strcat(s1.str,s2.str));return temp;
}//左移运算符重载
ostream &operator<<(ostream &out,myString s1)
{out<< s1.str <<"  "<<s1.size;return cout;
}
//右移运算符重载
istream &operator>>(istream &in,myString &s1)
{string s;in>>s;s1.size = s.size();strcpy(s1.str, s.c_str());return cin;
}
bool operator>(const myString s1,const myString s2)
{string s3 =s1.str;string s4 =s2.str;return s3>s4;
}
bool operator<(const myString s1,const myString s2)
{string s3 =s1.str;string s4 =s2.str;return s3<s4;
}
bool operator==(const myString s1,const myString s2)
{string s3 =s1.str;string s4 =s2.str;return s3==s4;
}
bool operator!=(const myString s1,const myString s2)
{string s3 =s1.str;string s4 =s2.str;return s3!=s4;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/650928.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

换脸插件升级导致SDWebUI无法启动cannot import name ‘Undefined‘ from ‘pydantic.fields‘

今天在一台新的机器环境装了SDWEBUI&#xff0c;都使用最新的版本&#xff0c;升级了下换脸的插件&#xff0c;于是乎启动崩溃了。错误如下 Launching Web UI with arguments: --listen --skip-torch-cuda-test --disable-nan-check --skip-version-check --skip-python-versi…

服装连锁收银系统需要注意的五个要素

在现代零售行业中&#xff0c;服装连锁店是一个庞大而复杂的商业体系&#xff0c;而收银系统则是其核心管理工具之一。商淘云服装连锁收银系统是一款专为服装连锁店设计的全面解决方案&#xff0c;为商家提供了高效、灵活的收银管理服务。在选择和配置服装连锁收银系统时&#…

Python + selenium自动化生成测试报告!

前言 今天笔者想和大家聊聊Pythonselenium自动化生成测试报告&#xff0c;批量执行完用例后&#xff0c;生成的测试报告是文本形式的&#xff0c;不够直观&#xff0c;为了更好的展示测试报告&#xff0c;最好是生成HTML格式的。 unittest里面是不能生成html格式报告的&#…

C# WinForm —— 10 单选按钮与复选框的介绍与使用

单选按钮 RadioButton 一组单选按钮中&#xff0c;只能选择一个&#xff0c;互相排斥 常用属性、事件&#xff1a; 属性用途(Name)单选按钮的ID&#xff0c;在代码里引用的时候会用到,一般以 rb开头Text单选按钮旁边显示的 文本信息Checked单选按钮的勾选状态Appearance控制单…

【个人博客搭建】(11)swagger添加jwt信息

这个主要是为了方便使用swagger时&#xff0c;能更好的带入我们的token。 ps&#xff1a;如果使用其他第三方api工具&#xff08;apipost、postman等&#xff09;则不需要。 &#xff08;当然&#xff0c;不用不能没有&#xff0c;是吧&#xff09; 1、在AddSwaggerGen内添加…

cuda非root用户安装及mamba库安装报错问题

1、先检查是不是cuda版本的问题&#xff08;cuda≥11.6&#xff09; 非root用户安装指南&#xff1a; &#xff08;1&#xff09;先去NVIDIA官网CUDA Toolkit Archive | NVIDIA Developer 选一个版本 查看architecture的命令 uname -m 查看version的命令 lsb_release -a 下…

【产品经理修炼之道】- 携程酒店业务

这篇文章里&#xff0c;作者以携程为参照对象进行了业务分析&#xff0c;一起来看看本文作者关于携程酒店业务的思考。想了解OTA、或者酒店业务的同学们&#xff0c;或许可以来看看本文的思路。 本文是以携程为参照对象做的一个业务分析&#xff0c;系列一共有三期&#xff0c…

【链表】Leetcode K个一组翻转链表

题目讲解 25. K 个一组翻转链表 算法讲解 虽然这道题是一道困难题&#xff0c;但是从代码层面很简单&#xff0c;只是一道简单的模拟&#xff1a;我们要先求出总共需要翻转的链表有多少组&#xff08;链表的长度 / k&#xff09;&#xff0c;接下来就是翻转k的链表最链接的问…

【JAVA】PO、VO、DAO、BO、DTO、POJO你分得清吗?

在Java开发中&#xff0c;PO、VO、DAO、BO、DTO、POJO这些词汇是比较常见的&#xff0c;每个术语都有其特定的含义和用途。下面是它们的具体区别&#xff1a; 名称简要概况用途和特定PO (Persistence Object) 持…

SpringBoot+vue开发记录(二)

说明&#xff1a;本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目&#xff1a; 如下&#xff0c;这样简单创建就行了&#xff0c;JDK什么的就先17&#xff0c;当然1.8也是可以的&#xff0c;后面可以改。 这样就创建好了&#xff1a; 2. pom.xml…

JVM(Jvm如何管理空间?对象如何存储、管理?)

Jvm如何管理空间&#xff08;Java运行时数据区域与分配空间的方式&#xff09; ⭐运行时数据区域 程序计数器 程序计数器&#xff08;PC&#xff09;&#xff0c;是一块较小的内存空。它可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机的多线程是通过时间片轮转调…

bugfix: com.alibaba.druid.sql.parser.EOFParserException: EOF

前言 在日常的开发工作中&#xff0c;我们经常会遇到各种各样的问题&#xff0c;其中涉及数据库操作的接口联调尤其容易出现意想不到的状况。今天我就遇到了一个关于Druid SQL解析异常的问题&#xff0c;具体表现为com.alibaba.druid.sql.parser.EOFParserException: EOF。通过…