C++第四天

news2025/5/23 10:50:54
  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;
        }
    
    

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

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

相关文章

使用Redis进行搜索

文章目录 构建反向索引 构建反向索引 在Begin-End区域编写 tokenize(content) 函数&#xff0c;实现文本标记化的功能&#xff0c;具体参数与要求如下&#xff1a; 方法参数 content 为待标记化的文本&#xff1b; 文本标记的实现&#xff1a;使用正则表达式提取全小写化后的…

特斯拉被比亚迪拉下神坛,马斯克难改命运岁月不如人

当这个消息浮现在我面前时&#xff0c;我几乎不敢相信眼前所见。比亚迪这个我曾无数次在文章中提及的中国车企&#xff0c;终于在2023年完成了伟大的历史任务——以销量突破特斯拉&#xff0c;站上全球电动车王座的宝座&#xff01; 过去我们都习惯于从欧美日韩那里听说汽车的成…

Go 编程必备:bufio 库的全面指南与实战技巧

Go 编程必备&#xff1a;bufio 库的全面指南与实战技巧 引言bufio 库概览bufio.Readerbufio.Writerbufio.Scanner 深入 bufio.Readerbufio.Reader 的基本使用高级功能应用场景 探索 bufio.Writerbufio.Writer 的基本使用高级功能应用场景 运用 bufio.Scannerbufio.Scanner 的基…

钉钉小程序生态7—企业机器人加互动卡片,改善用户体验的开始!

文章导航 钉钉小程序生态1—区分企业内部应用、第三方企业应用、第三方个人应用 钉钉小程序生态2—区分小程序和H5微应用 钉钉小程序生态3—钉钉扫码登录PC端网站 钉钉小程序生态4—钉钉小程序三方企业应用事件与回调 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知 钉…

React Admin 前端脚手架之ant-design-pro

文章目录 一、React Admin 前端脚手架选型二、React Admin 前端脚手架之ant-design-pro三、ant-design-pro使用步骤四、常用总结&#xff08;持续更新&#xff09;EditableProTable组件 常用组件EditableProTable组件 编辑某行后&#xff0c;保存时候触发发送请求EditableProTa…

Bayes贝叶斯识别Spam Email垃圾邮件

目录 介绍&#xff1a; 一、Gaussian Naive Bayes(连续型变量) 1.1数据处理 1.2建模 1.3cross_val_score函数评估 1.4classification_report函数评估 1.5classification_report函数和cross_val_score函数的区别 二、 Multinomial Naive Bayes&#xff08;离散型变量&…

软件工程专业毕业设计题目怎么选?

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

[嵌入式C][入门篇] 快速掌握基础(9个语句)

开发环境&#xff1a; 网页版&#xff1a;跳转本地开发(Vscode)&#xff1a;跳转 文章目录 一、基础语法&#xff08;1&#xff09;if (如果)示例1: 普通使用 if示例2: 带否则 else示例3: 否则如果 else if &#xff08;2&#xff09;switch case (选择)规则示例1: &#xff0…

Arduino开发实例-EMG 肌肉信号传感器

EMG 肌肉信号传感器 文章目录 EMG 肌肉信号传感器1、EMG 肌肉信号传感器介绍2、硬件准备及接线3、代码实现1、EMG 肌肉信号传感器介绍 在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌…

k8s笔记1- 初步认识k8s

k8s简介&#xff1a; kubernetes&#xff0c;俗称k8是&#xff0c;用于自动部署&#xff0c;扩缩和管理容器化应用程序的开源系统&#xff0c;它将组成应用程序的容器&#xff0c;组合成逻辑单元&#xff0c;便于管理和服务发现。 k8s的作用 自动化上线和回滚、存储编排…

听GPT 讲Rust源代码--compiler(9)

File: rust/compiler/rustc_trait_selection/src/traits/select/mod.rs 在Rust源代码中&#xff0c;rust/compiler/rustc_trait_selection/src/traits/select/mod.rs文件的作用是实现Rust编译器的trait选择器。 首先&#xff0c;让我们逐个介绍这些struct的作用&#xff1a; Se…

Boost学习之深入理解asio库

Asio简介 Boost C 库 Asio&#xff0c;它是异步输入输出的核心。 名字本身就说明了一切&#xff1a;Asio 即异步输入/输出。该库可以让 C 异步地处理数据&#xff0c;且平台独立。 异步数据处理就是指&#xff0c;任务触发后不需要等待它们完成。 相反&#xff0c;Boost.Asio …

调用百度地图 API 的步骤详解

百度地图 Web 服务 API 为开发者提供 http/https 接口&#xff0c;即开发者通过 http/https 形式发起检索请求&#xff0c;获取返回 json 或 xml 格式的检索数据。用户可以基于此开发 JavaScript、C#、C、Java 等语言的地图应用。百度地图 API 在线地址为&#xff1a;baidumap.…

Gromacs make_ndx建组问题

1. 选择特定分子或原子&#xff1a; gmx make_ndx -f input.gro -o output.ndx这将打开交互式界面&#xff0c;您可以在其中选择要包含在索引文件中的分子和原子。按照提示进行操作&#xff0c;选择适当的分组。 2. 手动创建索引文件&#xff1a; 您还可以手动创建一个文本文件…

JavaWeb——后端之Mybatis

四、Mybatis 概念&#xff1a; Mybatis是一款持久层&#xff08;Dao层&#xff09;框架&#xff0c;用于简化JDBC&#xff08;Sun操作数据库的规范&#xff0c;较繁琐&#xff09;的开发 历史&#xff1a; Apache的一个开源项目iBatis&#xff0c;2010年由apache迁移到了goog…

常见位运算总结

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 前言 1.基础位运算 &运算 |运算 ^运算 >>运算 <<运算 ~运算 2.给一个数n&#xff0c;确定他的二进制表示中的第x位&#xff0c;是0还是1 3.将一个数n的二进制表示的第x位修改成1 4.将一个数…

QML 项目中使用 Qt Design Studio 生成的UI界面

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 今天来和大家聊一下 Qt Design Studio 这个软件。这个软件的主要功能是用来快速完成 UI 界面&#xff0c;就和 widget 中的 desig…

Redis学习笔记(1)——感谢尚硅谷官方文档

Redis学习笔记&#xff08;1&#xff09;——感谢尚硅谷官方文档 1. NoSQL1.1 NoSQL数据库概述1.2 各种NoSQL数据库 2. Redis数据库安装2.1 安装条件2.2 Widows下如何安装Redis?2.3 Linux下如何安装Redis? 3. Redis介绍3.1 Redis 简介3.2 Redis 优势3.3 Redis与其他key-value…

HttpClient库与代理IP在爬虫程序中的应用

目录 前言 一、HttpClient库的基本使用方法 二、代理IP的使用方法 三、代理IP池的使用方法 四、总结 前言 在编写爬虫程序时&#xff0c;我们经常会使用HttpClient库来发送HTTP请求&#xff0c;获取网页内容。然而&#xff0c;有些网站可能会对频繁的请求进行限制&#x…

python的课后练习总结3之条件语句

1,简单点&#xff0c;只有IF IF 后面加入条件然后冒号: 条件成立执行的代码1 条件成立执行的代码2 条件是否成立都执行的代码 身高 float(input(请输入你的身高(米):)) if 身高 > 1.3:print(f您的身高是{身高}米,请您买票) print(祝您旅途愉快) 2,IF 加个else if 条件:…