C++ DAY4

news2024/12/28 20:47:12

1.思维导图

2.运算符重载

#include <iostream>
using namespace std;
 
class Person
{
private:
    int age;
    int *p;
public:
    //1.无参构造
    Person():p(new int(89))
    {
        age = 18;
    }
    //2.有参构造
    Person(int age,int num)
    {
        this->age = age;
        this->p=new int(num);
    }
    //3.拷贝构造函数
    Person(Person &other)
    {
        age=other.age;
        //浅拷贝
//        p=other.p;
        //深拷贝
        p=new int;
        *p=*(other.p);
        cout << "Person拷贝构造函数" << endl;
 
    }
    //4.拷贝赋值函数
    Person &operator=(Person &other)
       {
           if(this!=&other)
           {
               age = other.age;
               //浅拷贝
               //point = other.point;
               //深拷贝
               *p = *(other.p);
               cout << "Person拷贝赋值函数" << endl;
           }
           return *this;   //返回类对象本身
       }
    //5.析构函数
    ~Person()
    {
        delete p;
        p=nullptr;
        cout << "释放那个了p指向的空间" << endl;
        cout << "Person的析构函数" << endl;
    }
    void show()
    {
        cout<<"age="<<age<<endl;
        cout<<"*p="<<*p<<endl;
        cout<<"p="<<p<<endl;
    }


    //前自增
    Person &operator++(){
        this->age++;
        *(this->p)++;
        return *this;
    }
    //后自增
    Person operator++(int){
        Person temp;
        temp=*this;
        this->age++;
        *(this->p)++;
        return temp;
    }
    //前自减
    Person &operator--(){
        this->age--;
        *(this->p)--;
        return *this;
    }
    //后自减
    Person operator--(int){
        Person temp;
        temp=*this;
        this->age--;
        *(this->p)--;
        return temp;
    }
    //逻辑非!重载
    Person &operator!(){
        this->age=!this->age;
        *(this->p)=!*(this->p);
        return *this;
    }
    //按位取反~重载
    Person &operator~(){
        this->age=~this->age;
        *(this->p)=~*(this->p);
        return *this;
    }
    //负号-重载
    Person &operator-(){
        this->age=-this->age;
        *(this->p)=-*(this->p);
        return *this;
    }
    //乘法重载
    Person operator*(Person &per){
        Person temp;
        temp.age=this->age*per.age;
        *(temp.p)=*(this->p)*(*(per.p));
        return temp;
    }
    //除法重载
    Person operator/(Person &per){
        Person temp;
        temp.age=this->age/per.age;
        *(temp.p)=*(this->p)/(*(per.p));
        return temp;
    }
    //求余重载
    Person operator%(Person &per){
        Person temp;
        temp.age=this->age%per.age;
        *(temp.p)=*(this->p)%(*(per.p));
        return temp;
    }
    //加法重载
    Person operator+(Person &per){
        Person temp;
        temp.age=this->age+per.age;
        *(temp.p)=*(this->p)+(*(per.p));
        return temp;
    }
    //减法重载
    Person operator-(Person &per){
        Person temp;
        temp.age=this->age-per.age;
        *(temp.p)=*(this->p)-(*(per.p));
        return temp;
    }
    //小于重载
    bool operator<(Person &per){ 
        return this->age<per.age;
    }
    //小于等于重载
    bool operator<=(Person &per){ 
        return this->age<=per.age;
    }
    //大于重载
    bool operator>(Person &per){ 
        return this->age>per.age;
    }
    //大于等于重载
    bool operator>=(Person &per){ 
        return this->age>=per.age;
    }
    //等于重载
    bool operator==(Person &per){ 
        return this->age==per.age;
    }
    //不等于重载
    bool operator!=(Person &per){ 
        return this->age!=per.age;
    }
    //逻辑与重载
    bool operator&&(Person &per){
        return (this->age||*(this->p))&&(per.age||*(per.p));
    }
    //逻辑或重载
    bool operator||(Person &per){
        return (this->age||*(this->p))||(per.age||*(per.p));
    }
    //+=重载
    Person &operator+=(Person &per){
        this->age+=per.age;
        *(this->p)+=*(per.p);
        return *this;
    }
    //-=重载
    Person &operator-=(Person &per){
        this->age-=per.age;
        *(this->p)-=*(per.p);
        return *this;
    }
    //*=重载
    Person &operator*=(Person &per){
        this->age*=per.age;
        *(this->p)*=(*(per.p));
        return *this;
    }
    ///=重载
    Person &operator/=(Person &per){
        this->age/=per.age;
        *(this->p)/=(*(per.p));
        return *this;
    }
    //%=重载
    Person &operator%=(Person &per){
        this->age%=per.age;
        *(this->p)%=(*(per.p));
        return *this;
    }

 
    //输出重载
    ostream &operator<<(ostream &out, Person &per)
    {
        out << per.age << endl;
        out << *(per.p) << endl;
        return out;
    }    
    //输入重载
    istream &operator>>(istream &in, Person &per)
    {
        in >> per.age >> *(per.p);
        return in;
    }  

};
 
int main()
{
    Person k1;
    cout<<"k1:"<<endl;
    k1.show();
    cout<<"-----------------------------"<<endl;
    Person k2(20,99);
    cout<<"k2:"<<endl;
    k2.show();
    cout<<"-----------------------------"<<endl;
    cout<<"---------拷贝构造函数----------"<<endl;
    Person k3=k2;
    cout<<"k3:"<<endl;
    k3.show();
    cout<<"-----------------------------"<<endl;
    cout<<"---------拷贝赋值函数----------"<<endl;
    Person k4;
    k4=k2;
    cout<<"k4:"<<endl;
    k4.show();
 
    cout<<"-----------------------------"<<endl<<endl;
    return 0;
}

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

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

相关文章

数据库中的日期函数DM和mysql都通用,计算年月日时分秒,获取日期之间相差的值

select MINUTE(date) from t_test; year month day hour minute second --对应年月日时分秒 select date from t_test select MINUTE(createtime),to_char(sysdate(),yyyy-MM-dd) select TIMESTAMPDIFF(minute,date,now()),date from t_test DateUtil.between(new Date(),ne…

小程序底层技术机制解读:版本更新与底层运行原理

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言小程序版本更新机制…

Day.3 LeetCode刷题练习(反转链表)

题目&#xff1a; 例子&#xff1a; 分析题目&#xff1a; 分析题目&#xff0c;因为是一个单链表所以不能找到尾后往前改变&#xff0c;所以不妨换个思路从前往后进行修改链表链接关系 用到三个指针 指针cur指向所要改变的节点链接关系、指针prev指向所要改变节点的前一个节点…

白盒测试入门概念

白盒测试的度量 根据待测产品的内部实现细节来设计测试用例白盒测试的执行手段是可以涵盖单元测试、集成测试使用代码覆盖率作为白盒测试的主要度量指标 代码覆盖率常见概念 语句覆盖&#xff1a;每行代码都要覆盖至少一次判定覆盖&#xff1a;判定表达式的真假至少覆盖一次…

CSS文字阴影渐变动画效果

最近项目中需要一些简单的动画效果&#xff0c;就写了一个文字渐变的动画效果,纯CSS动画.文字加了一点阴影效果,看起来有发光哒感觉~ 效果如下图 大家可以自己拷贝代码亲自试一试 代码看下面 html <div class"son"> Particia </div>css .son {color…

SpringBoot2+Vue2实战(七)springboot集成jwt

一、集成jwt JWT依赖 <!-- JWT --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version></dependency> UserDto import cn.hutool.core.annotation.Alias; import …

【数据库】mysql 管理员密码丢失解决方案

本次操作环境是mysql5.7.24版本 问题&#xff1a;由于各种原因&#xff0c;数据库管理员密码丢失&#xff0c;无法登陆数据库 解决方法&#xff1a; 1、进入my.cnf文件进行修改配置 在[mysqld]下添加 skip-grant-tables 2、重启mysql服务 service mysql stop service mysql …

Fiddler如何延迟接口响应时间

需求描述&#xff1a;通过延迟接口响应时间来mock响应超时的测试场景 解决方法&#xff1a; 使用fiddler模拟接口延时请求&#xff0c;fiddler设置参数如下&#xff1a;

淘宝再夺顶级技术比赛CVPRNTIRE冠军,背后是这些提升用户体验的内容技术

不知不觉间&#xff0c;内容电商似乎已经成为人们生活中不可或缺的存在&#xff1a;在闲暇时间&#xff0c;我们已经习惯于拿出手机&#xff0c;从电商平台的直播间随手下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的场景布置、有趣的内容输出都是非常关键的影响因…

【JavaScript】文档注释详解

文章目录 什么是文档注释为什么要写文档注释不使用文档注释存在的隐患使用函数成员时的书写问题调用函数时功能使用问题 文档注释官方标签函数参数标签 param参数类型 {}参数注释对象属性属性注释使用带有对象属性注释的参数 返回值标签 returns注释 作者标签 author许可证标签…

spring cloud 之 eureka

Eureka概述 Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理&#xff0c;SpringCloud将它集成在其子项目spring-cloud-netflix中 在服务注册与发现中&#xff0c;有一个注册中心。当服务器启动的时候&#xff0c;会把当前自己服务器的信息比如服务地址通讯地址…

ubuntu 显卡驱动/cuda/cudnn

显卡驱动 https://www.bilibili.com/video/BV1Zc41137tU/?spm_id_from333.999.0.0&vd_sourced75fca5b05d8be06d13cfffd2f4f7ab5 使用recommended的驱动&#xff0c;open和无open的区别在于无open更适合发挥NVIDIA显卡的全部功能和性能&#xff0c;特别是GPU加速计算等任…

K8S集群安装与部署(Linux系统)

一、环境说明&#xff1a;CentOS7、三台主机&#xff08;Master&#xff1a;10.0.0.132、Node1&#xff1a;10.0.0.133、Node2&#xff1a;10.0.0.134&#xff09; 二、准备环境&#xff1a; 映射 关闭防火墙 三、etcd集群配置 安装etcd&#xff08;Master&#xff09; [ro…

[源码分析]-xxljob(1): 整体介绍

xxljob是一种分布式的调度框架&#xff0c;所谓分布式调度&#xff0c;是指调度器和执行器不在同一个进程里&#xff0c;因此必须进行远程服务调用&#xff0c;也需要考虑高可用问题。 但是由于调度器维护的数据是落库而在各个节点间共享的&#xff0c;因此不需要考虑数据的一…

必备数据可视化工具大揭秘

探索数据的美妙世界&#xff01;我们为您带来了一份精心策划的数据可视化工具分享合集。在这个数字时代&#xff0c;数据可视化是理解和传达数据的关键&#xff0c;而这些工具将帮助您以令人惊叹的方式展现数据的潜力。 分享一&#xff1a;伙伴云 伙伴云是一个提供仪表盘和可…

vscode超炫酷的编码特效详解

1.在扩展中搜索 插件&#xff1a;Power Mode 2.在设置里搜索Code Actions On Save 3.点击在settings.json中编辑 {"powermode.enabled": true, //启动// "powermode.presets": "flames", // 火花效果 // 炸裂// "powermode.presets&quo…

织梦宏,解锁元音之谜

本篇博客会讲解力扣“2586. 统计范围内的元音字符串数”的解题思路&#xff0c;这是题目链接。 本题可以使用一个宏来判断一个字符是不是元音字母&#xff0c;接着遍历字符串数组&#xff0c;统计满足条件的字符串个数。 需要满足的条件有&#xff1a; 第一个字符是元音字母。…

微信小程序 滚动到底部加载新的数据 之后滚动到顶部

1.配置到底部监听 在app.json的window里面加入 里面的300表示距离底部300rpx触发onReachBottom事件 默认50rpx "window": {"onReachBottomDistance": 300}, 2.在数据列表的js页面 /*** 页面上拉触底事件的处理函数*/onReachBottom() {console.log("…

采用 CD4011 的温度监测自动控制电路

该电路结构简单&#xff0c;制作容易&#xff0c;由一只与非门和一只热敏电阻组成测控电路和警笛声发声电路&#xff0c;由一只继电器作为执行电路。 一、电路工作原理 电路原理如图 8 所示。 测温电阻RT接在控制门D1的输入端&#xff0c;它和电阻R1、R2及RP通过RP的分压调节…

Cesium入门之十一:认识Cesium中的Entity

目录 Entity类简介Entity在Cesium中的作用Entity的常用属性使用Entity创建点、线、面常用的Entity图形对象及其属性创建点、线、面的方法创建点创建线创建面将点、线、面添加到viewer中 修改Entity的外观和样式点&#xff08;Point&#xff09;的外观样式线&#xff08;Polylin…