C++—DAY4

在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;
    }
    //成员函数实现+运算符重载
    Complex operator+(const Complex c1);
    Complex operator*(const Complex c1);
    friend Complex operator-(const Complex c1,const Complex c2);
    friend Complex operator/(const Complex c1,const Complex c2);
    friend Complex operator%(const Complex c1,const Complex c2);
    bool operator>(const Complex c1);
    friend bool operator>=(const Complex c1,const Complex c2);
    friend bool operator&&(const Complex c1,const Complex c2);
    Complex operator--();
    friend Complex operator--(Complex &c1,int);
    friend istream &operator>>(istream &in,Complex &c1);
    friend ostream &operator<<(ostream &out,Complex c1);
    friend Complex operator^(const Complex c1,const Complex c2);
    Complex operator~();

};
Complex Complex::operator+(const Complex c1)
{
    //实例化一个temp类对象,并调用有参构造
    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;
    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;
}
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 Complex::operator>(const Complex c1)
{
    return this->rel>c1.rel;
}
bool operator>=(const Complex c1,const Complex c2)
{
    return c1.rel>=c2.rel;
}
bool operator&&(const Complex c1,const Complex c2)
{
    return ((c1.rel&&c2.rel)&&(c1.vir&&c2.vir));
}
Complex Complex::operator--()
{
    --this->rel;
    --this->vir;
    return *this;
}
Complex operator--(Complex &c1,int)
{
    Complex temp(c1.rel--,c1.vir--);
    return temp;
}

istream &operator>>(istream &in,Complex &c1)
{
    in >> c1.rel >> c1.vir;
    return in;
}
ostream &operator<<(ostream &out,Complex c1)
{
    out << c1.rel << "+" << c1.vir << "i" <<endl;
    return out;
}
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 Complex::operator~()
{
    Complex temp;
    temp.rel=~this->rel;
    temp.vir=~this->vir;
    return temp;
}
int main()
{
    Complex c1(2,5),c2(3,4);
    Complex c3=c1+c2;
    c3.show();
    Complex c4=c1.operator*(c2);
    c4.show();
    Complex c5=operator-(c1,c2);
    c5.show();
    Complex c6=operator/(c1,c2);
    c6.show();
    Complex c7=operator%(c1,c2);
    c7.show();
    cout << operator>=(c1,c2) << endl;
    Complex c8(0,1),c9(1,1);
    cout << operator&&(c8,c9) << endl;
    Complex c10=c9--;
    c10.show();
    Complex c11=--c8;
    c11.show();
    return 0;
}

在昨天作业myString类的基础上,完成+、关系运算符、逻辑运算符、输入输出运算符的重载

#include <iostream>
#include <cstring>
using namespace std;
char c = '\0';
class myString
{
    private:
        char *str;          //记录c风格的字符串
        int size;           //记录字符串的实际长度
    public:
        //无参构造
        myString():str(new char),size(0)
        {}
        //有参构造
        myString(char *p,int size):str(new char[size+1]),size(size)
        {
            strcpy(str,p);
        }
        myString(string s1):str(new char[s1.size()+1]),size(s1.length())
        {
            strcpy(str,s1.c_str());
        }
        //拷贝构造
        myString(const myString &other):str(new char[other.size+1]),size(size)
        {
            strcpy(str,other.str);
        }
        //拷贝赋值函数
        myString &operator=(const myString &other)
        {
            //提前把申请的空间释放,重新申请空间,为了防止原有的空间不够存下新的内容
            if(&other!=this)
            {
                delete []str;
                str = new char[other.size+1];
                strcpy(str,other.str);
                this->size = other.size;
            }
            return *this;
        }
        //析构函数
        ~myString()
        {
            delete []str;
        }
        //判空函数
        bool empty()
        {
            return size==0;
        }
        //size函数
        int size_()
        {
            return size;
        }
        //c_str函数
        const char *c_str()
        {
            return str;
        }
        //at函数
        char &at(int pos)
        {
            //判断位置合理性
            if(pos<0||pos>=size)
            {
                cout << "位置不合理" << endl;
                return c;
            }
            return str[pos];
        }
        myString operator+(const myString m1);
        friend bool operator==(const myString m1,const myString m2);
        friend bool operator||(const myString m1,const myString M2);
        friend ostream &operator<<(ostream &out,myString m1);
        friend istream &operator>>(istream &in,myString &m1);
};
myString myString::operator+(const myString m1)
{
    myString temp;
    temp.str=strcat(this->str,m1.str);
    temp.size=this->size+m1.size;
    return temp;
}
bool operator==(const myString m1,const myString m2)
{
    return (strcmp(m1.str,m2.str)&&(m1.size==m2.size));
}
bool operator||(const myString m1,const myString m2)
{
    return ((m1.str!=0||m2.str!=0)||(m1.size!=0||m2.size!=0));
}
ostream &operator<<(ostream &out,myString m1)
{
    out << m1.str << "\t" << m1.size;
    return out;
}
istream &operator>>(istream &in,myString &m1)
{
    in >> m1.str >> m1.size;
    return  in;
}
int main()
{
    char str[]="hello";
    myString str1(str,5);
    cout << str1.empty() << endl;
    cout << str1.size_() << endl;
    cout << str1.at(3) << endl;
    str1.at(3) = '9';
    cout << str1.at(3) << endl;
    return 0;
}

思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日刷题】Day26

【每日刷题】Day26 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. [NOIP2008]笨小猴_牛客题霸_牛客网 (nowcoder.com) 2. 添加逗号_牛客题霸_牛客网 (nowcoder.com) …

windows/linux 安装php的 sql server 扩展

Windowsphpstudyphp7.1 下载&#xff1a;ODBC、下载php 的sql server 扩展 路径&#xff1a;下载地址 版本&#xff1a;我的是7.1 对应的ODBC 是13&#xff0c;php 的sql server 扩展为4.3 安装&#xff1a;msodbcsql 直接安装、sqlsrv43 安装完把 扩展复制到php71 的扩展文…

Python脚本抢票【笔记】

Python脚本抢票【笔记】 前言版权推荐Python脚本抢票【Python】microsoft edge驱动器下载以及使用最后 前言 2024-4-17 18:19:15 以下内容源自《【笔记】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是ht…

Unity WebGL 转换微信小游戏方案

方案特点 保持原引擎工具链与技术栈无需重写游戏核心逻辑&#xff0c;支持大部分第三方插件由转换工具与微信小游戏运行环境保证适配兼容&#xff0c;保持较高还原度微信小游戏平台能力以C# SDK方式提供给开发者&#xff0c;快速对接平台开放能力 技术原理 Unity的BuildTarget支…

【RocketMQ知识点总结-1】

文章目录 RocketMQ介绍RocketMQ架构&#xff1a;NameServer:BrokerProducerTopic&#xff08;主题&#xff09;&#xff1a;Queue&#xff08;队列&#xff09;&#xff1a;Message&#xff08;消息&#xff09;&#xff1a; RocketMQ的工作流程RocketMQ的使用场景异步消息传递…

【数据结构】Map和Set(1)

&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;个人主页&#x1f388;&#x1f388;&#x1f388;&#x1f388;&#x1f388; &#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;&#x1f9e7;数据结构专栏&#x1f388;&#x1f388;&#x1f388;&…

【c++】探究C++中的list:精彩的接口与仿真实现解密

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;本篇文章来到list有关部分&#xff0c;这一部分函数与前面的类似&#xff0c;我们简单讲解&#xff0c;重难点在模拟实现时的迭代器有关实现 目录 1.List介绍2.接…

【博特激光】激光焊接机在塑料领域的应用

激光焊接机在塑料领域的应用已经越来越广泛&#xff0c;这主要得益于其独特的优势和特性。激光焊接机利用激光束产生高能量、高温的条件&#xff0c;将塑料材料熔化并融合在一起&#xff0c;实现焊接的目的。 在塑料领域&#xff0c;激光焊接机主要用于各种塑料制品的焊接&…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的&#xff0c;我们班主任想委托我做一个程序&#xff0c;能显示还有几天考试。我立即理解了这个意思&#xff0c;接下了这个项目。 话不多说&#xff0c;来看看这个项目吧—— 项目简介 仓库地址&#xff1a;https://gitee.com/yaoqx/desktop-countdown-day 这是 …

C语言入门课程学习笔记-6

C语言入门课程学习笔记-6 第27课 - 字符数组与字符串&#xff08;上&#xff09;第28课 - 字符数组与字符串&#xff08;下&#xff09;第29课 - 数组专题练习&#xff08;上&#xff09;第30课 - 数组专题练习&#xff08;下&#xff09; 本文学习自狄泰软件学院 唐佐林老师的…

matplotlib 安装失败:Failed building wheel for matplotlib 解决方案

Python | Failed building wheel for matplotlib 朋友遇到 python 安装 matplotlib 时的问题&#xff0c;笔者帮忙远程调试(踩了不少坑)。网上的解决方案有很多无效&#xff0c;以此来记录以下个人解决方案。 在使用指令 pip install matplotlib出现如下报错&#xff1a; “…

移远通信再推系列高性能卫星、5G、GNSS及三合一组合天线

4月23日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;再次推出多款高性能天线产品&#xff0c;以进一步满足物联网市场对高品质天线产品的需求。 其中包括卫星天线YETN001L1A、三合一组合天线YEMA300QXA和YEMN302Q1A&#xff0c;外部5G天线YECN…

Unity对应的c#版本

本文主要是记录一下unity已经开始兼容c#的版本和.net版本&#xff0c;以便更好的利用c#的特性。 c#和.net对应情况 微软已经将.net开发到.net 9了&#xff0c;但是unity的迭代速度远没有c#迭代速度快&#xff0c;已知unity最新的LTS版本unity2023已经兼容了c#9 可以在unity手册…

生成数据能否帮助模型训练?

能否利用生成模型生成的假数据来辅助学习&#xff1f; 到底是可以左脚踩右脚&#xff08;bootsrap&#xff09;地实现 weak-to-strong 的不断提升&#xff0c;还是像鸡生蛋、蛋生鸡一样&#xff0c;只不过是徒劳无功&#xff1f; 论文题目&#xff1a; Do Generated Data Alw…

集成学习算法学习笔记

一、集成学习的基本思想 三个臭皮匠顶一个诸葛亮 集成学习会考虑多个评估器的建模结果&#xff0c;汇总后得到一个综合的结果&#xff0c;以此来获取比单个模型更好的回归或分类表现。 很多独立的机器学习算法&#xff1a;决策树、神经网络、支持向量机 集成学习构建了一组基…

如何在iPhone/iPad上恢复已删除的微信消息?

“我从我的iPhone上删除了一些微信消息。我想知道我是否可以从我的iPhone上恢复已删除的微信消息。我尝试了一些方法&#xff0c;但没有一个可以恢复我丢失的消息&#xff0c;只能恢复我的短信。谁可以给我有什么建议吗&#xff1f;” ——蒂娜 如何在iPhone或iPad上恢复已删除…

3122.使矩阵满足条件的最少操作次数

周赛第三题,知道要用动态规划,但是不知道怎么回到子问题 显然根据题意我们需要让每一列都相同,但是相邻列不能选择同一种数字,观察到数据nums[i]介于0-9,我们就以此为突破口. 首先我们用count[n][10], count[i][j]记录第i1列值为j的元素个数,转移方程如下: dfs(i,pre) max(dfs…

根据标签最大层面ROI提取原始图像区域

今天要实现的任务是提取肿瘤的感兴趣区域。 有两个文件&#xff0c;一个是nii的原始图像文件&#xff0c;一个是nii的标签文件。 我们要实现的是&#xff1a;在标签文件上选出最大层面&#xff0c;然后把最大层面的ROI映射到原始图像区域&#xff0c;在原始图像上提裁剪出ROI…

6.模板初阶

目录 1.泛型编程 2. 函数模板 2.1 函数模板概念 2.2函数模板格式 2.3 模板的实现 2.4函数模板的原理 2.5 函数模板的实例化 3.类模板 1.泛型编程 我们如何实现一个 交换函数呢&#xff1f; 使用函数重载虽然可以实现&#xff0c;但是有一下几个不好的地方&#xff1a; …

(学习日记)2024.04.26:UCOSIII第五十节:User文件夹函数概览(uC-CPU文件夹)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…