2024/4/26 C++day4

news2024/11/24 17:37:48

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

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

相关文章

小程序中如何快速给分类添加商品

​快速在分类下面上传商品&#xff0c;并且能够设置商品顺序&#xff0c;关系到运营效率的高低。下面就具体介绍如何快速在某个分类下面设置商品。 一、在商品管理处&#xff0c;查询某个分类下面的商品。 进入小程序管理员后台->商品管理&#xff0c;点击分类输入框&…

【汇编语言】直接定址表

【汇编语言】直接定址表 文章目录 【汇编语言】直接定址表前言一、移位指令移位指令过程逻辑移位指令shl 和 shr 二、操作显存数据显示的原理显示缓冲区的结构显示信息的一种“直接”方式 三、描述内存单元的标号关于标号去了冒号的数据标号数据标号同时描述内存地址和单元长度…

css:echarts渐变色转换为css渐变色

通过一个下拉框来选择渐变类型&#xff0c;为了简化&#xff0c;我设置了三种&#xff1a;水平方向的渐变、垂直方向的渐变和径向渐变用&#xff0c;表格来配置echarts渐变色的百分比位置和颜色。 config是表格里的数据格式如下&#xff1a; offset是百分比位置&#xff0c;co…

2024北京车展来了!自主品牌成“流量担当”!

时隔四年&#xff0c;2024北京国际车展重磅回归&#xff01; 4月25日&#xff0c;2024&#xff08;第十八届&#xff09;北京国际汽车展览会&#xff08;以下简称“北京车展”&#xff09;正式开幕&#xff0c;本次车展以“新时代 新汽车”为主题。作为今年国内首个国际A级车展…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    &#xff08;空格&#xff09; &#xff1a;分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境&#xff1a;在为系统分区时&#xff0c;如何精确评估和分配各个硬盘分区的容量&#xff0c;因为系统管理员不但要考虑到当前某个分区需要的容量&a…

使用 Godot 游戏引擎为 Apple 的 visionOS 创建游戏和应用的平台

借助GodotVision ,您可以使用Godot 游戏引擎为 Apple VisionOS创建游戏和应用程序。 保卫牛城堡,一款使用 GodotVision 制作的 VisionOS 游戏 GodotVision 运行一个控制本机RealityKit 视图的无头 Godot实例。粗略地说:Godot 是后端,

C++面向对象程序设计 - 派生类的构造函数和析构函数

构造函数的主要作用对数据成员初始化&#xff0c;基类的构造函数是不能被继承的&#xff0c;在声明派生类时&#xff0c;派生类并没有把类的构造函数继承下来。因此&#xff0c;对继承过来的基类成员初始化的工作也要由派生类的构造函数完成&#xff1b;所以在派生类中不仅要考…

OSPF的LSA与特殊区域

Area区域概念 *一个区域维护一张LSDB&#xff0c;路由器详细的链路信息只在这个区域内传播 不是每一台路由器都需要了解所有外部目的地的详细信息 *OSPF网络的层次化设计 通过区域ID标识 骨干&#xff08; Backbone &#xff09;区域&#xff0c;必须是area 0(骨干区域…

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

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

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq&#xff0c;一个是存储&…

抓住四月小尾巴,拿个offer~

首先声明一下~本人是个双非二本大三在校生。 从三月份就开始了苦哈哈的找实习之旅&#xff0c;快三月中旬才敢投大厂&#xff0c;为什么嘞&#xff1f;因为学校要求必须参加完期末考试才能出去实习&#xff08;差不多七月初&#xff09;&#xff0c;因为这个好多公司一听就不安…

算法模版自用(杂)

文章目录 算法库函数next_permutation(start,end) prev_permutation(start,end) (全排列函数)nth_element &#xff08;求第k小值&#xff09;next(it,num),prev(it,num)min_element(begin(),end()),max_element(begiin(),end()) (取最小值最大值) _int128的输入输出STLlist 数…

serdes 同轴电缆和双绞线接法

1、同轴电缆 Coaxial Cable 2、双绞线STP&#xff08;Shielded Twisted Pair&#xff09; 比如我们用的车载camera一般就只需要接一路即可&#xff0c;RIN接camera&#xff0c; RIN-通过电容接地。

Android 使用 GeckoView 并实现 js 交互、权限交互

参考文档&#xff1a; geckoview版本 引入文档&#xff08;有坑 下面会给出正确引入方式&#xff09; 官方示例代码1 官方示例代码2 参考了两位大神的博客和demo&#xff1a; GeckoView js交互实现 geckoview-jsdemo 引入方式&#xff1a; maven {url "https://maven.…

MySQL中的死锁预防和解决

MySQL中的死锁预防和解决 死锁是数据库管理系统中常见的问题&#xff0c;特别是在高并发的应用场景下。MySQL数据库中的死锁会导致事务处理速度减慢&#xff0c;甚至完全停止&#xff0c;因此理解并预防死锁至关重要。本文将详细介绍如何预防MySQL中的死锁&#xff0c;包括常用…

【算法基础实验】图论-深度优先搜索和深度优先路径

深度优先(DFS) 理论基础 深度优先搜索&#xff08;DFS, Depth-First Search&#xff09;是图和树的遍历算法中的一种&#xff0c;它从一个节点开始&#xff0c;沿着树的边走到尽可能深的分支&#xff0c;直到节点没有子节点为止&#xff0c;然后回溯继续搜索下一个分支。DFS …

网络安全实训Day17and18

写在前面 第17和18天都讲的sql注入&#xff0c;故合并 ​​​​​​ 网络空间安全实训-渗透测试 Web渗透 定义 针对Web站点的渗透攻击&#xff0c;以获取网站控制权限为目的 Web渗透的特点 Web技术学习门槛低&#xff0c;更容易实现 Web的普及性决定了Web渗透更容易找到目…

JavaEE 初阶篇-深入了解 I/O 高级流(缓冲流、交换流、数据流和序列化流)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 缓冲流概述 1.1 缓冲流的工作原理 1.2 使用缓冲流的步骤 1.3 字节缓冲流于字符缓冲流的区别 1.4 字节缓冲流的实例 1.5 字符缓冲流的实例 2.0 转换流概述 2.1 字符…

MySQL函数之单行函数

1.前言 我们在使用 SQL 语言的时候&#xff0c;不是直接和这门语言打交道&#xff0c;而是通过它使用不同的数据库软件&#xff0c;即DBMS。DBMS 之间的差异性很大&#xff0c;远大于同一个语言不同版本之间的差异。实际上&#xff0c;只有很少的函数是被 DBMS 同时支持的。比…

MySQL基础知识——MySQL索引

深入浅出索引 索引的意义 索引的意义&#xff1a;在大量数据中&#xff0c;加速访问少量特定数据&#xff1b; 使用索引的前提条件&#xff1a; 1&#xff09;索引块数量小于数据块数量&#xff1b; 2&#xff09;索引键有序&#xff0c;故可以使用二分查找等高效的查找方式&…