C++第四天

  1. 定义一个Person类,私有成员int age,string &name,定义一个Stu类,包含私有成员double *score,写出两个类的构造函数、析构函数、拷贝构造和拷贝赋值函数,完成对Person的运算符重载(算术运算符、条件运算符、逻辑运算符、自增自减运算符、插入/提取运算符)
    //主程序
    #include"stuper.h"
    int main()
    {
        cout<<boolalpha<<endl;
        string name="lisi";
        //Person p;
        Person p1(23,18,name);//自动调用有参构造
        p1.show();
        Person p2=p1;//自动调用拷贝构造函数
        p2.show();
        Person p3(p2);//自动调用拷贝构造函数
        p3.show();
        Person q1(10,20,name);
    
        Person q2(6,15,name);
        Person q3=q1+q2;
        q3.show1();
        //插入<<运算符重载
        cout<<"p1:"<<p1<<endl;
    
        if(q1>q2)
        {
            cout<<"q1>q2"<<endl;
        }
        q1=q2++;
        q2.show();
        q1.show();
        Person p5;
        cin>>p5;
        cout<<"p5:"<<p5<<endl;
    
        cout<<"============================================"<<endl;
        Stu s1;//自动调用无参构造
        Stu s2(88);//自动调用有参构造
        s2.show();
        Stu s3=s2;//自动调用拷贝构造函数
        s3.show();
        Stu s4(s3);//自动调用拷贝构造函数
        s4.show();
    
        s1=s2;
        s1.show();
        return 0;
    }
    //头文件
    #ifndef STUPER_H
    #define STUPER_H
    #include <iostream>
    using namespace std;
    class Person;
    const Person operator++(Person &O,int);
    ostream &operator<<(ostream &cout, const Person &p);
    istream &operator>>(istream &cin, Person &p);
    
    class Person
    {
        friend istream &operator>>(istream &cin, Person &p);
        friend const Person operator++(Person &O,int);
        friend ostream &operator<<(ostream &cout, const Person &p);
    private:
        int age;
        int age1;
        string n="df";
        string &name=n;
    public:
        //无参构造
        Person(){cout<<"Person无参构造"<<endl;}
        //有参构造
        Person(int age,int age1,string &name):age(age),age1(age1),name(name)
        {
            cout<<"Person有参构造"<<endl;
        }
        //析构函数
        ~Person()
        {
            cout << "Person::析构函数" << endl;
        }
        //拷贝构造函数
        Person(const Person &other):age(other.age),age1(other.age1),name(other.name)
        {
             cout << "Person::拷贝构造函数" << endl;
        }
        //拷贝赋值函数
        Person &operator=(const Person &other)
        {
            if(this != &other) //避免自己赋值给自己
            {
                age = other.age; //深拷贝
                age1=other.age1;
                name=other.name;
            }
            cout << "拷贝赋值函数" << endl;
            return *this;
        }
        //输出
        void show()
        {
            cout<<"age="<<age<<"  age1="<<age1<<"    name="<<name<<endl;
    
        }
    
        void show1()
        {
            cout<<"age="<<age<<"  age1="<<age1<<endl;
        }
        //Person的运算符重载
        //算术运算符
        //成员函数实现+号运算符重载
        const Person operator+(const Person &R) const
        {
            Person temp;
            temp.age = this->age + R.age;
            temp.age1= this->age1 + R.age1;
            return temp;
        }
    //局部函数实现>号运算符重载
        bool operator>( const Person &R)const
        {
            if(age > R.age  && age1 > R.age1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    
    
    
    };
    //==========================================
    
    class Stu
    {
    private:
        double *score;
    public:
        //无参构造
        Stu(){cout<<"Stu无参构造"<<endl;}
        //有参构造
        Stu(double score):score(new double(score))
        {
            cout<<"Stu有参构造"<<endl;
        }
        //析构函数
        ~Stu()
        {
            cout << "Stu::析构函数" << endl;
            delete score;
        }
        //拷贝构造函数
        Stu(const Stu &other):score(new double(*(other.score)))
        {
             cout << "Stu::拷贝构造函数" << endl;
        }
        //拷贝赋值函数
        Stu &operator=(const Stu &other)
        {
            if(this != &other) //避免自己赋值给自己
            {
                score = new double(*(other.score)); //深拷贝
            }
            cout << "拷贝赋值函数" << endl;
            return *this;
        }
        void show()
        {
            cout<<"score="<<*score<<endl;
        }
    };
    #endif // STUPER_H
    
    //函数体
    #include "stuper.h"
    
    
        //全局函数实现前置++运算符重载
        const Person operator++(Person &O,int)
        {
            Person temp;
            temp.age=O.age++;
            temp.age1=O.age1++;
            return temp;
        }
    
        //全局函数实现插入<<运算符重载
        ostream &operator<<(ostream &cout, const Person &p)
        {
            cout << "age = " << p.age << " age1 = " << p.age1<<"name = "<<p.name;
            return cout;
        }
    
        //全局函数实现提取>>运算符重载
        istream &operator>>(istream &cin, Person &p)
        {
            cin >> p.age >> p.age1>>p.name;
            return cin;
        }
    
    

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

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

相关文章

【DevOps-03】Build阶段-Maven安装配置

一、简要说明 下载安装JDK8下载安装Maven二、复制准备一台虚拟机 1、VM虚拟复制克隆一台机器 2、启动刚克隆的虚拟机,修改IP地址 刚刚克隆的虚拟机 ,IP地址和原虚拟的IP地址是一样的,需要修改克隆后的虚拟机IP地址,以免IP地址冲突。 # 编辑修改IP地址 $ vi /etc/sysconfig…

感觉软件测试很简单,但为何这么多劝退的?

上一个说软件测试简单的&#xff0c;已经被面试官问死了。。。 现在已经过了 ”不会但我会学“ 就能感动面试官的时代&#xff0c;随着供需关系的变化&#xff0c;不论是对于面试官还是面试者&#xff0c;面试的成本越来越高。为了筛选到更优秀的程序员&#xff0c;面试官们可谓…

iptables

iptables有多种功能&#xff0c;每一种功能都用一张表来实现 最常用的功能是防火墙和NAT 从RHEL7开始&#xff0c;默认的防火墙为firewalld&#xff0c;但是它的底层仍然调用iptables 安装iptables服务 # 关闭firewalld [rootnode1 ~]# systemctl stop firewalld [rootnode…

在Gradle工程中使用checkstyle来规范你的项目

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

深度学习 | 多模态算法

AIGC也就是AI内容生成已经成为新一轮人工智能发展的热点和必然趋势&#xff0c;它使得大规模高质量的创作变得更加容易。 一 、InstructGPT模型 1、GPT系列回顾 chatGPT和InstructGPT都使用了指示学习和基于人工反馈的强化学习来指导模型的训练&#xff0c;不同点仅仅是在采集数…

ECharts配置个性化图表:圆环、立体柱状图

ECharts配置个性化图表&#xff1a;圆环、立体柱状图 圆环图双纵轴多数据面积图折柱混合图3D立体圆环饼图3D立体饼图参考文章 官网调试地址&#xff1a;点击跳转调试 圆环图 效果图&#xff1a; 配置&#xff1a; option {color: [#29BEFF, #A2DC00, #FFC400, #FF7F5C, #C…

c jpeg 编码解码验证数据

1. yuv420p 1616 像素点 384字节全部数据 把上面的384个char从左到右&#xff0c;从上到下的顺序输入文件&#xff0c;就能显示红绿蓝白4个水平条

SwiftUI之深入解析ContentUnavailableView的实战应用

一、基本用法 SwiftUI 引入了新的 ContentUnavailableView 类型&#xff0c;允许在应用程序中展示空状态、错误状态或任何其他内容不可用的状态。那么&#xff0c;如何使用 ContentUnavailableView 引导用户浏览应用程序中的空状态呢&#xff1f;首先看看 ContentUnavailableV…

python中的selenium安装的步骤(浏览器自动化测试框架)

一、前言 我们今天要安装的selenium 就是浏览器自动化测试框架&#xff0c;是一个用于Web应用程序的测试工具&#xff0c;就是模拟用户操作。支持的浏览器包括Chrome&#xff0c;IE&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera等。今天我们以Chrome为例讲…

msvcr120.dll丢失怎样修复,教你msvcr120.dll丢失的解决办法

在使用电脑的过程中出现关于msvcr120.dll丢失的问题&#xff0c;那么出现这样的问题应该怎么解决呢&#xff1f;其实解决的办法也很简单&#xff0c;今天就和大家说说msvcr120.dll丢失怎样修复&#xff0c;同时给大家介绍一些关于msvcr120.dll文件的相关内容&#xff0c;了解ms…

CMake入门教程【核心篇】添加库(add_library)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2.STATIC…

python爬虫实现获取招聘信息

使用的python版本&#xff1a; 3.12.1 selenium版本&#xff1a;4.8.0 urllib版本&#xff1a;1.26.18 from selenium import webdriver from selenium.webdriver import ActionChains import timeimport re import xlwt import urllib.parsedef get_html(url):chrome_drive…

将linux的代码上传至gitte,从创建到linux命令详解

目录 1&#xff1a;创建gitte的代码仓库 1&#xff1a;登录gitte网页 https://gitee.com/ 2&#xff1a;点击导航栏的&#xff0b;号 3&#xff1a;点击新建仓库​编辑4&#xff1a;仓库配置 ​编辑5&#xff1a;复制仓库的路径 linux操作系统命令行 1&#xff1a; linux…

Hadoop集群三节点搭建(一)

一、第一台虚拟机准备 确认是可以上网&#xff0c;方便下载文件和工具&#xff0c;使用ping命令测试下 安装工具 net-tool&#xff1a;工具包集合&#xff0c;包含ifconfig等命令&#xff0c;大家可以根据自己需要按需下载 创建普通用户attest&#xff0c;并修改attest用户的密…

MO 2023 年度回顾

PART-ONE 行业态势 随着供需关系的变化&#xff0c;数据库的竞争在经历了 3 年 “百花齐放” 般的发展后&#xff0c;终于在 2023 年进入到了一个相对收拢的阶段。 2023 年&#xff0c;各个数据库厂商间很有默契地在两个方面达成了一致&#xff1a; HTAP 已经成为新一代数据…

YOLO算法入门指南:了解门槛、学习路径及其易学性

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

基于Segformer实现PCB缺陷检测(步骤 + 代码)

导 读 本文主要介绍基于Segformer实现PCB缺陷检测 &#xff0c;并给出步骤和代码。 背景介绍 PCB缺陷检测是电子制造的一个重要方面。利用Segformer等先进模型不仅可以提高准确性&#xff0c;还可以大大减少检测时间。传统方法涉及手动检查&#xff0c;无法扩展且容易出错…

k8s---声明式资源管理(yml文件)

在k8s当中支持两种声明资源的方式&#xff1a; 1、 yaml格式&#xff1a;主要用于和管理资源对象 2、 json格式&#xff1a;主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件&#xff0c;所有的内容都在y…

webapp下没有蓝点解决

解决方法&#xff1a; File->Project Structure 现在就是一个JavaWeb项目了。

WMS仓储管理系统如何优化急料处理流程

在当今快速发展的商业环境中&#xff0c;企业的运营效率和供应链管理面临着前所未有的挑战。尤其在面对急料处理这一环节时&#xff0c;许多企业都感到力不从心。为了满足生产线的连续运作、确保客户订单的及时交付&#xff0c;WMS仓储管理系统的急料处理流程优化成为了关键。本…