C++-4

news2024/11/23 11:32:21
  1. 在Complex类的基础上,完成^,>,~运算符的重载
    #include <iostream>
    
    using namespace std;
    class Complex
    {
        int rel;    //实部
        int vir;    //虚部
    public:
        Complex(){}
        Complex(int rel,int vir):rel(rel),vir(vir){}
       /* Complex operator+(const Complex c1);
        Complex operator-(const Complex c1);
        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);
        friend Complex operator/(const Complex c1,const Complex c2);
        bool operator>(const Complex c1);
        bool operator<(const Complex c1);
        bool operator>=(const Complex c1);
        bool operator<=(const Complex c1);
        bool operator==(const Complex c1);
        bool operator!=(const Complex c1);
        bool operator!();
        bool operator&&(const Complex c1);
        bool operator||(const Complex c1);
        Complex operator++();
        Complex operator--();
        friend Complex operator++(Complex &c1,int );
        friend Complex operator--(Complex &c1,int );
        friend ostream &operator<<(ostream &out,Complex c1);
        friend istream &operator>>(istream &in,Complex &c1);
        Complex operator^(Complex c1);
        Complex operator<<(int a);
        Complex operator>>(int a);
        Complex operator~();
        Complex show()
        {cout << rel << "+"<< vir << "i" << endl;}
        operator int()
        {return this->rel;}
        operator double()
        {return this->rel;}
        operator char()
        {return 'a';}
        int operator()(int a,int b )
        {return a>b?a:b;}
    };
    //^,<<,>>,~
    Complex Complex::operator^(Complex c1)
    {
        Complex temp;
        temp.rel=(this->rel)^c1.rel;
        temp.vir=(this->vir)^c1.vir;
        return temp;
    }
    Complex Complex::operator<<(int a)
    {
        rel=rel<<a;
        vir=vir<<a;
        return *this;
    }
    Complex Complex::operator>>(int a)
    {
        rel=rel>>a;
        vir=vir>>a;
        return *this;
    }
    Complex Complex::operator~()
    {
        rel=~rel;
        vir=~vir;
        return *this;
    }
    //自增自减
    Complex Complex::operator++()
    {
        ++this->rel;
        ++this->vir;
        return *this;
    }
    Complex Complex::operator--()
    {
        --this->rel;
        --this->vir;
        return *this;
    }
    Complex operator++(Complex &c1,int )
    {
        Complex temp=c1;
        c1.rel++;
        c1.vir++;
        return temp;
    }
    Complex operator--(Complex &c1,int )
    {
        Complex temp=c1;
        c1.rel--;
        c1.vir--;
        return temp;
    }
    
    //关系
    bool Complex::operator!()
    {
        return !(this->rel || this->vir);
    }
    bool Complex::operator&&(const Complex c1)
    {
        return this->rel && c1.rel && this->vir && c1.vir;
    }
    bool Complex::operator||(const Complex c1)
    {
        return this->rel || c1.rel || this->vir || c1.vir;
    }
    bool Complex::operator>(const Complex c1)
    {
        return this->rel>c1.rel;
    }
    bool Complex::operator<(const Complex c1)
    {
        return this->rel<c1.rel;
    }
    bool Complex::operator>=(const Complex c1)
    {
        return this->rel>=c1.rel;
    }
    bool Complex::operator<=(const Complex c1)
    {
        return this->rel<=c1.rel;
    }
    bool Complex::operator==(const Complex c1)
    {
        return this->rel==c1.rel&&this->vir==c1.vir;
    }
    bool Complex::operator!=(const Complex c1)
    {
        return this->rel!=c1.rel||this->vir!=c1.vir;
    }
    
    //加减乘除
    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-c1.vir * c2.vir;
        temp.vir =  c1.vir * c2.rel+c1.rel * c2.vir;
        return temp;
    }
    Complex operator/(const Complex c1,const Complex c2)
    {
        Complex temp;
        int a = c1.rel;
        int b = c1.vir;
        int c = c2.rel;
        int d = c2.vir;
        temp.rel =  (a*c+b*d)/(c*c-d*d);
        temp.vir =  (b*c-a*d)/(c*c+d*d);
        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)
    {
        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)
    {
        Complex temp;
        temp.rel = this->rel / c1.rel;
        temp.vir = this->vir / c1.vir;
        return temp;
    }*/
    
    //输出
    ostream &operator<<(ostream &out,Complex c1)
    {
        out << c1.rel << "+" << c1.vir << "i" ;
        return out;
    }
    //输出
    istream &operator>>(istream &in,Complex &c1)
    {
        in >> c1.rel >> c1.vir;
        return in;
    }
    
    int main()
    {
        Complex c1(4,6),c2(4,0),c3(1,2),c4;
       // cin >> c3 >> c4 ;
       // cout << c3 << endl << c4 << endl;
        cout << (c1<<1) << endl << (c2>>1) << endl;
        cout << ~c3 <<endl;
        c4 =  c1^c2 ;
        cout << c4 <<endl;
    
    
       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[20]),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 s1);
        bool operator>(const myString s1);
        bool operator&&(const myString s1);
        bool operator||(const myString s1);
        friend ostream &operator<<(ostream &out,myString s1);
        friend istream &operator>>(istream &in,myString &s1);
};
ostream &operator<<(ostream &out,myString s1)
{
    out << s1.str;
    return  out;
}
istream &operator>>(istream &in,myString &s1)
{
    in >> s1.str;
    return  in;
}
myString myString::operator+( myString s1)
{
    strcat(this->str,s1.str);
    return *this;
}
bool myString::operator>( myString s1)
{
    return strcmp(this->str,s1.str);
}
bool myString::operator&&( myString s1)
{
    return this->str&&s1.str;
}
bool myString::operator||( myString s1)
{
    return this->str||s1.str;
}
int main()
{
    myString s1,s2;
    cin >> s1 >> s2;
    cout <<"s1 = "<< s1 << endl << "s2 = " <<  s2 << endl;
    cout << "s1+s2 = " << s1+s2 << endl;
    cout << "s1>s2 = " << (s1>s2) <<endl;
    cout << "s1&&s2 = " << (s1&&s2) <<endl;


    return 0;
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5、Flink事件时间之Watermark详解

1&#xff09;生成 Watermark 1.Watermark 策略简介 为了使用事件时间语义&#xff0c;Flink 应用程序需要知道事件时间戳对应的字段&#xff0c;即数据流中的每个元素都需要拥有可分配的事件时间戳。 通过使用 TimestampAssigner API 从元素中的某个字段去访问/提取时间戳。…

服务器数据恢复—Storwize V3700存储数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌Storwize V3700存储&#xff0c;10块硬盘组建了2组Mdisk加入到一个存储池中&#xff0c;一共创建了1个通用卷来存放数据&#xff0c;主要数据为oracle数据库。 服务器存储故障&#xff1a; 其中一组Mdisk中两块磁盘出现故障离线&…

【Linux】进程间通信(共享内存、消息队列、信号量)

一、System V —— 共享内存&#xff08;详解&#xff09; 共享内存区是最快的 IPC 形式。一旦这样的内存映射到共享它的进程的地址空间&#xff0c;这些进程间数据传递不再涉及到内核&#xff0c;换句话说&#xff0c;就是进程不再通过执行进入内核的系统调用来传递彼此的数…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑&#xff0c;颜色混合&#xff0c;视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇解决(达芬奇)是一个多用户协作的解决方案&#xff0c;使编辑…

实验7:路由冗余协议HSRP配置管理(课内实验以及解答)

实验目的及要求&#xff1a; 理解首跳冗余协议&#xff08;FHRP&#xff09;的工作原理&#xff0c;掌握热备份路由器协议 (HSRP)&#xff08;思科私有协议&#xff09;原理和配置。能够实现网络终端设备虚拟网关的配置和网络故障的灵活切换&#xff0c;完成相应网络的联通性测…

配置opencv属性表

编译opencv cmake -DCMAKE_INSTALL_PREFIX./install -G "Visual Studio 15 2017" -A x64 .. cmake -DCMAKE_INSTALL_PREFIX./install -G "Visual Studio 15 2017" -A Win32 ..cmake --build . --config Release -j 2cmake --build . --config Release --t…

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

【介绍下Chrome插件开发】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

.net8系列-04图文并茂手把手教你配置Swagger支持token以及实现Swagger扩展,Swagger代码单独抽离

前情提要 接上篇文章&#xff0c;我们当前已完成如下内容&#xff1a; 创建应用成功创建接口成功配置Swagger实现接口注释和版本控制 本文章主要内容为&#xff1a;配置Swagger支持token传值测试接口 快速上手-代码配置 添加如下代码 文件目录&#xff1a;\xiaojinWebAppl…

解决NetworkManager覆盖/etc/resolv.conf的问题

发布时间&#xff1a;2024.4.27 问题 /etc/resolv.conf是Linux下DNS的配置文件。 但是NetworkManager会用覆盖它&#xff0c;导致我们每次都要重新配置。 解决办法 这是官方推荐的做法。或者你可以用resolveconf工具。 $ nm-connection-editor会调起一个界面&#xff0c;…

uniapp 微信小程序 获取openid,手机号进行登录,配合后端

流程&#xff1a;登录注册功能,通过uni.getUserProfile获取wxcode,通过wxcode传给后端获取openid,sessionkey,unionid。 通过<u-button type"success" open-type"getPhoneNumber" getphonenumber"decryptPhoneNumber">一键登录</u-butt…

【React】反向代理和修改打包后的目录

反向代理 前提是做了反向代理&#xff1a; 安装 http-proxy-middleware npm i http-proxy-middleware在src/下新建 setupProxy.js const proxy require("http-proxy-middleware");module.exports function(app) {app.use(proxy("/api", {target: &qu…

selenium入门篇(环境搭建、八大定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型 …

.net报错异常及常用功能处理总结(持续更新)

.net报错异常及常用功能处理总结---持续更新 1. WebApi dynamic传参解析结果中ValueKind Object处理方法问题描述方案1&#xff1a;(推荐&#xff0c;改动很小)方案2&#xff1a; 2.C# .net多层循环嵌套结构数据对象如何写对象动态属性赋值问题描述JavaScript动态属性赋值.net…

淘宝图片搜索API接口:技术原理、使用方法与最佳实践指南

淘宝图片搜索API接口技术详解 在数字化时代&#xff0c;图片搜索已经成为一种高效、直观的信息检索方式。淘宝作为国内最大的电商平台&#xff0c;其图片搜索API接口对于提高购物体验和商家运营效率具有重要意义。本文将详细解析淘宝图片搜索API接口的技术原理、使用方法和注意…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中&#xff0c;我们实现了火球术伤害功能&#xff0c;在火球击中敌方目标&#xff0c;可以降低敌人20的血量&#xff0c;这个值现在是固定的&#xff0c;后面我们会修改火球的伤害设置。接着&#xff0c;我们也测试了功能是实现的&#xff0c;但是在正常的游玩过程…

【QA】Git的底层原理

前言 本文通过一个简单的示例&#xff0c;来理解Git的底层原理。 示例 1、新建本地仓库并上传第一个文件 相关步骤&#xff1a; 新建仓库及创建文件查看文件状态将文件添加到暂存区将文件提交到本地仓库 HMTeenLAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-…

工厂模式(二)

一、简单工厂 package com.xu.demo.factoryPattern;/*** 简单工厂模式类*/ public class SimpleFactoryPattern {public static Phone create(String name) {//根据输入对象名称判断返回相匹配的对象if("IPhone".equals(name)) {//返回对象return new IPhone();}else…

Swift - 流程控制

文章目录 Swift - 流程控制if-else2. while3. for3.1 闭区间运算符3.2 半开区间运算符3.3 for - 区间运算符用在数组上3.3.1 单侧区间 3.4 区间类型3.5 带间隔的区间值 4. switch4.1 fallthrough4.2 switch注意点 5. 复合条件6. 区间匹配、元组匹配7. 值绑定8. where9. 标签语句…

网络安全培训对软件开发人员的重要性

微信搜索关注&#xff1a;网络研究观 阅读获取更多信息。 组织所经历的持续不断的网络威胁没有任何放缓的迹象&#xff0c;使得实现有效安全的任务变得越来越具有挑战性。 根据最新的 Verizon 数据泄露调查报告&#xff0c;2023 年高级攻击增加了 200% 以上。 IBM 数据泄露成…