C++—DAY4

news2025/1/16 11:00:23

在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.coloradmin.cn/o/1628490.html

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

相关文章

力扣每日一题-总行驶距离-2024.4.25

力扣题目&#xff1a;总行驶距离 题目链接: 2739.总行驶距离 题目描述 代码思路 直接用数学模拟计算即可 代码纯享版 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int sum 0;while(additionalTank > 0){if(mainTank > 5){mai…

动静态库以及动态链接

文章目录 静态库制作静态库如何使用静态库 动态库动态库的制作动态库的使用动态链接 库是给别人用的&#xff0c;所以库中一定不存在main函数。库一般会有lib前缀和后缀&#xff0c;去掉前缀和后缀才是库名。 静态库 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译…

OpenHarmony实战开发-使用SmartPerf-Host分析应用性能

简介 SmartPerf-Host是一款深入挖掘数据、细粒度展示数据的性能功耗调优工具&#xff0c;可采集CPU调度、频点、进程线程时间片、堆内存、帧率等数据&#xff0c;采集的数据通过泳道图清晰地呈现给开发者&#xff0c;同时通过GUI以可视化的方式进行分析。该工具当前为开发者提…

C#技巧之窗体去鼠标化

简介 在窗体程序中不用鼠标&#xff0c;直接使用键盘完成想要的操作。 实现的方法有两种&#xff0c;一种是使用键盘上的Tab键使控件获得焦点&#xff0c;然后用enter键触发该控件上的事件&#xff08;一般为click事件&#xff09;。另一种是&#xff0c;为控件添加快捷键&am…

优维全新力作:统一采控平台

在本月&#xff0c;优维新一代核心系统「EasyOps」7.0大版本重磅上线&#xff0c;为广大用户带来了“更核心、更智能、更开放、更客制”的产品能力。&#xff08;点击回看&#xff1a;重磅&#xff01;优维科技发布EasyOps7.0大版本&#xff09;在本次版本能力分享上&#xff0…

基于springboot实现中药实验管理系统设计项目【项目源码+论文说明】计算机毕业设计

基于springboot实现中药实验管理系统设计演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了中药实验管理系统的开发全过程。通过分析中药实验管理系统管理的不足&#xff0c;创建了一个计算机管理中药实验管…

基于WOA鲸鱼优化的购售电收益与风险评估算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于WOA鲸鱼优化的购售电收益与风险评估算法.WOA优化算法是一种基于鲸鱼捕食过程的仿生优化算法&#xff0c;其包括鲸鱼行走觅食、鲸鱼包围以及鲸鱼螺旋捕食三个步骤。在WOA优…

用 Python 创建 Voronoi 图

概述 最常见的空间问题之一是找到距离我们当前位置最近的兴趣点 (POI)。假设有人很快就会耗尽汽油&#xff0c;他/她需要在为时已晚之前找到最近的加油站&#xff0c;解决这个问题的最佳解决方案是什么&#xff1f;当然&#xff0c;驾驶员可以检查地图来找到最近的加油站&…

C++从入门到精通——string类

string类 前言一、为什么学习string类C语言中的字符串示例 二、标准库中的string类string类string类的常用接口说明string类对象的常见构造string类对象的容量操作string的接口测试及使用string类对象的访问及遍历操作下标和方括号遍历范围for遍历迭代器遍历相同的代码&#xf…

6.模板初阶

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

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock&#xff1a;读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async&#xff1a;异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件&#xff0c;A线程进行读取操作&#xff0c;B…

刷题日记 ---- 顺序表与链表相关经典算法题(C语言版)

目录 1. 移除元素2. 合并两个有序数组3. 移除链表元素4. 反转链表5. 合并两个有序链表6. 链表的中间结点7. 环形链表的约瑟夫问题8. 分割链表总结 正文开始 1. 移除元素 题目链接: 移除元素 题目描述: 思路历程: 题目明确要求, 不能使用额外的数组空间, 也就是说不可以创建…

linux系统-FTP服务配置

目录 一、FTP简介 1.什么是FTP&#xff1f;&#xff1f;&#xff1f; 2.FTP的两种模式 二、安装配置FTP服务 1.关闭防火墙和核心防护 2.安装VSFTPD 3.修改配置文件 4.黑白名单设置 一、FTP简介 1.什么是FTP&#xff1f;&…

【Node.js工程师养成计划】之打造自己的脚手架工具

一、创建全局的自定义命令 1、打开一个空文件夹&#xff0c;新建一个bin文件夹&#xff0c;在bin文件夹下新建cli.js文件&#xff0c;js文件可以命名为cli.js&#xff08;您随意&#xff09; 2、在cli.js文件中的开头&#xff08;&#xff01;&#xff01;&#xff09;写下面这…

Prometheus Metrics指标类型 Gauge(仪表盘)

指标是用来衡量性能、消耗、效率和许多其他软件属性随时间的变化趋势。它们允许工程师通过警报和仪表盘来监控一系列测量值的演变&#xff08;如CPU或内存或磁盘使用量、请求持续时间、延迟等&#xff09;。指标在IT监控领域有着悠久的历史&#xff0c;并被工程师广泛使用&…

Linux下的UDEV机制/守护进程

一. Udev机制 二. 守护进程 1. 概念&#xff1a; 2. 基本特点&#xff1a; a. 生存周期长&#xff0c;一般操作系统启动的时候就启动&#xff0c;关闭的时候关闭&#xff08;这是由开发人员自行将守护进程添加到开机启动项的&#xff09;。 b. 守护进程和终端无关联&#…

云备份项目->配置环境

升级gcc到7.3版本 sudo yum install centos-release-scl-rh centos-release-scl sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c source /opt/rh/devtoolset-7/enable echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc 安装Jsoncpp库 sud…

知识分享之cookie

http协议中的cookie&#xff0c;什么是cookie如何获取cookie 一、什么是Cookie Cookie&#xff08;曲奇&#xff0c;小甜饼的译名&#xff09;在互联网技术领域中&#xff0c;是指一种小型文本文件&#xff0c;它由网站服务器发送给用户的浏览器&#xff0c;并被浏览器存储在用…

【春 联---turtle海龟画图】

春联 又称"春贴"、"门对"、"对联"&#xff0c;是过年时所贴的红色喜庆元素"年红"中一个种类。它以对仗工整、简洁箱巧的文字描绘美好形象&#xff0c;抒发美好愿 望&#xff0c;是中国特有的文学形式&#xff0c;是华人们过年 的重要习…

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 的扩展文…