c++中类的应用综合练习

整理思维导图

课上类实现> 、<、!=、||、!和后自增、前自减、后自减运算符的重载

代码部分:

#include <iostream>
using namespace std;
class complex
{
    int rel;
    int vir;
public:
    complex(int rel,int vir):rel(rel),vir(vir){}
    complex(){}
    void show();
    complex operator+(complex other);
    complex operator-(complex other);
    complex operator*(complex other);
    complex operator/(complex other);
    bool operator==(const complex other);
    bool operator>(const complex other);
    friend bool operator&&(const complex c1,const complex c2);
    friend bool operator||(const complex c1,const complex c2);
    complex operator++();
    complex operator++(int);
    complex operator--();
    complex operator--(int);
};
//+
complex complex::operator+(complex other)
{
    complex temp;
    temp.rel=this->rel+other.rel;
    temp.vir=this->vir+other.vir;
    return  temp;
}
//-
complex complex::operator-(complex other)
{
    complex temp;
    temp.rel=rel+other.rel;
    temp.vir=vir+other.vir;
    return  temp;
}
//*
complex complex::operator*(complex other)
{
    complex temp;
    temp.rel=rel*other.rel;
    temp.vir=vir*other.vir;
    return  temp;
}
//  /
complex complex::operator/(complex other)
{
    complex temp;
    temp.rel=rel/other.rel;
    temp.vir=vir/other.vir;
    return  temp;
}
// ==
bool complex::operator==(const complex other)
{
    return this->rel==other.rel&&this->vir==other.vir;
}
// >
bool complex::operator>(const complex other)
{
    return this->rel>other.rel&&this->vir>other.vir;
}
//&&
bool operator&&(const complex c1,const complex c2)
{
    return (c1.rel||c1.vir)&&(c2.rel||c2.vir);
}
//||
bool operator||(const complex c1,const complex c2)
{
    return (c1.rel&&c1.vir)||(c2.rel&&c2.vir);
}
//前++
complex complex::operator++()
{
    this->rel=this->rel+1;
    this->vir=this->vir+1;
    return *this;
}
//后++
complex complex::operator++(int)
{
    complex temp;
    temp.rel=this->rel;
    temp.vir=this->vir;
    this->rel=this->rel+1;
    this->vir=this->vir+1;
    return temp;
}
//前--
complex complex::operator--()
{
    complex temp;
    temp.rel=--(this->rel);
    temp.vir=--(this->vir);
    return  temp;
}
//后--
complex complex::operator--(int)
{
    complex temp;
    temp.rel=this->rel;
    temp.vir=this->vir;
    this->rel=this->rel-1;
    this->vir=this->vir-1;
    return temp;
}
void complex::show()
{
    cout << rel << "+" << vir << "i" << endl;

}
int main()
{
    int num1=12,num2=28;
    num2=num1+num2;
    complex c1(num1,num2);
    complex c2(8,2);
    complex c3=c1.operator+(c2);
    c3=c1-c2;
    c3=c1*c2;
    c3=c1/c2;
    c3.show();
    cout << (c3==c2) << endl;
    cout << (c3>c2) <<  endl;
    cout << "c1&&c2?" << endl;
    cout << (c1&&c2) << endl;
    cout << "c1||c2?" << endl;
    cout << (c1||c2) << endl;
    complex c4(1,1);
    complex c6(1,1);
    complex c5(2,2);
    c5=c6+(c4++);
    c5.show();
    --c5;
    c5.show();
    c5--;
    c5.show();
    return 0;
}

效果图:

实现昨天作业中My_string类中的+,==,>运算符重载

代码部分:

#include <iostream>
#include <cstring>
using namespace std;
char c = '\0';
class My_string
{
    char *str;     //记录C风格的字符串
    int size;      //记录字符串长度
public:
    //无参构造
    My_string():str(new char('\0')),size(0){cout << "My_string的无参构造" << endl;}
    //有参构造
    My_string(const char *p):str(new char[strlen(p)+1]),size(strlen(p))
    {
        strcpy(str,p);
        cout << "My_string的有参构造" << endl;
    }
    //拷贝构造
    My_string(const My_string &other):str(new char[other.size+1]),size(other.size)
    {
        strcpy(str,other.str);   //完成两个类对象字符串内容的拷贝
        cout << "拷贝构造" << endl;
    }
    //拷贝赋值
    My_string &operator=(const My_string &other)
    {
        //先把目标类对象指针原来指向的堆地址释放
        delete this->str;
        str = new char[other.size+1];   //申请新的能容纳下other类对象字符串的空间
        strcpy(str,other.str);    //拷贝字符串
        this->size = other.size;
        //返回自身的引用
        return *this;
    }
    //析构函数
    ~My_string()
    {
        delete []str;   //释放str指向的多个空间
    }
    //at函数
    char &my_at(int num);  //可以判断访问是否合法
    My_string operator+(My_string &other);
    bool operator>(My_string &other);
    bool operator==(My_string &other);
};
char &My_string::my_at(int num)
{
    if(num<0||num>=this->size)
    {
        cout << "访问越界" << endl;
        return c;
    }
    return str[num];
}
// +
My_string My_string::operator+(My_string &other)
{
    My_string temp;
    strcat(this->str,other.str);
    temp.size=this->size+other.size;
    return  temp;
}
//  ==
bool My_string::operator==(My_string &other)
{
    return this->size==other.size;
}
// >
bool My_string::operator>(My_string &other)
{
    return this->size>other.size;
}
int main()
{
    My_string s1 = "hello";
    My_string s2 = "world!";
    My_string s3 = s2;
    s1.my_at(0) = 'a';
    cout << s1.my_at(0) << endl;
    s1 = s2;


}

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

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

相关文章

ElasticSearch 搜索、排序、分页功能

一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…

mybatis常见错误

1.没有在mybatis.xml里面引入映射文件 2. 连接数据库部分有误 3.控制台输出无误&#xff0c;数据库里只插入了id sql语句有误 正确 <insert id"add" useGeneratedKeys"true" keyProperty"id">insert into t_teacher values (null,#{nam…

GLM-4-Plus初体验

引言&#xff1a;为什么高效的内容创作如此重要&#xff1f; 在当前竞争激烈的市场环境中&#xff0c;内容创作已成为品牌成功的重要支柱。无论是撰写营销文案、博客文章、社交媒体帖子&#xff0c;还是制作广告&#xff0c;优质的内容不仅能够帮助品牌吸引目标受众的注意力&a…

Mac/Windows端长期破解myBase8方法(无需安装火绒)

提醒 不管哪个端&#xff0c;都需要先退出myBase。 Mac 进入用户根目录/Users/c0ny100&#xff0c;即下边是Macintosh HD > 用户 > [你的用户名]这个界面然后按ShiftCommond.&#xff0c;显示隐藏文件。找到.Mybase8.ini文件 打开.Mybase8.ini文件&#xff0c;删除Fir…

Capture绘制元器件(Candance 17.4)

step1&#xff1a;新建元器件库 step2&#xff1a;新建元器件 step3&#xff1a;新建元器件,填写元器件名称以及类型 step4&#xff1a;绘制元器件形状 step5&#xff1a;添加引脚 添加引脚名称以及序号 将GND、VIN等电源属性引脚从Passive改为Power&#xff0c;其余为Passive …

支持自定义离线地图地理区域,查询组件及数据源功能增强,DataEase开源BI工具v2.10.3 LTS发布

2024年12月9日&#xff0c;人人可用的开源BI工具DataEase正式发布v2.10.3 LTS版本。 这一版本的功能变动包括&#xff1a;数据源方面&#xff0c;API数据源和Excel数据源支持对字段类型和长度进行设置&#xff1b;图表方面&#xff0c;离线类地图支持自定义地理区域设置&#…

【Unity学习笔记·第十二】Unity New Input System 及其系统结构和源码浅析

转载请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/details/132534422 作者&#xff1a;CSDN|Ringleader| 主要参考&#xff1a; 官方文档&#xff1a;Unity官方Input System手册与API官方测试用例&#xff1a;Unity-Technologies/InputS…

STM32F103单片机HAL库串口通信卡死问题解决方法

在上篇文章 STM32F103单片机使用STM32CubeMX创建IAR串口工程 中分享了使用cubeMX直接生成串口代码的方法&#xff0c;在测试的过程中无意间发现&#xff0c;串口会出现卡死的问题。 当串口一次性发送十几个数据的时候&#xff0c;串口感觉像卡死了一样&#xff0c;不再接收数据…

【指南】03 CSC联系外导

确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…

umi实现动态获取菜单权限

文章目录 前景登录组件编写登录逻辑菜单的时机动态路由页面刷新手动修改地址 前景 不同用户拥有不同的菜单权限&#xff0c;现在我们实现登录动态获取权限菜单。 登录组件编写 //当我们需要使用dva的dispatch函数时&#xff0c;除了通过connect函数包裹组件还可以使用这种方…

swagger-codegen

一、通过Swagger生成客户端代码 下载&#xff1a;https://github.com/swagger-api/swagger-codegen#编译打包 cd E:\软件空间\代码生成\swagger-codegen-3.0.64 mvn clean package#指定swagger地址生成客户端代码 cd E:\软件空间\代码生成\swagger-codegen-3.0.64\modules\swa…

Kael‘thas Sunstrider Ashes of Al‘ar

Kaelthas Sunstrider 凯尔萨斯逐日者 <血精灵之王> Kaelthas Sunstrider - NPC - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Ashes of Alar 奥的灰烬 &#xff08;凤凰 310%速度&#xff09; Ashes of Alar - Item - 魔兽世界怀旧服TBC数据…

7.Vue------$refs与$el详解 ------vue知识积累

$refs 与 $el是什么&#xff1f; 作用是什么? ref&#xff0c;$refs&#xff0c;$el &#xff0c;三者之间的关系是什么&#xff1f; ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式&#xff0c;就需要先给元素设定一个 class 一样&#xff0c;同理&#xff0c;…

医院门诊预约挂号管理系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 医院门诊预约挂号管理系统设计与实现 摘 要 本医院门诊预约挂号管理系统是针对目前医院门诊预约挂号管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的医院门诊预约挂号管理系统存在的问题…

学习记录,泛型界限1

泛型界限 上限 泛型的上限&#xff0c;下限。对类型的更加具体的约束&#xff01; 如果给某个泛型设置了上界&#xff1a;这里的类型必须是上界 如果给某个泛型设置了下界&#xff1a;这里的类型必须是下界

OpenAI直播发布第4天:ChatGPT Canvas全面升级,免费开放!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

[工具升级问题] 钉钉(linux版)升级带来的小麻烦

本文由Markdown语法编辑器编辑完成。 1. 背景: 今日钉钉又发布了新的升级版本。由于我工作时使用的是Ubuntu 20.04版本&#xff0c;收到的升级推送信息是&#xff0c;可以升级到最新的7.6.25-Release版本。根据钉钉官方给出的历次更新版说明&#xff0c;这个新的版本&#xf…

DPDK用户态协议栈-TCP Posix API 2

tcp posix api send发送 ssize_t nsend(int sockfd, const void *buf, size_t len, __attribute__((unused))int flags) {ssize_t length 0;void* hostinfo get_host_fromfd(sockfd);if (hostinfo NULL) {return -1;}struct ln_tcp_stream* stream (struct ln_tcp_stream…

【网络开发-socket编程】

1 socket 简介 socket&#xff08;套接字&#xff09;是linux下的一种进程间通信机制&#xff0c;使用socket的IPC可以使得不同主机之间通信&#xff0c;也可以是同一台主机的不同程序之间。socket通常是客户端<------>服务端的通信模式&#xff0c;多个客户端可以同时连…

Python实现中国象棋

探索中国象棋 Python 代码实现&#xff1a;从规则逻辑到游戏呈现 中国象棋&#xff0c;这款源远流长的棋类游戏&#xff0c;承载着深厚的文化底蕴与策略智慧。如今&#xff0c;借助 Python 与 Pygame 库&#xff0c;我们能够在数字世界中复刻其魅力&#xff0c;深入探究代码背后…