0825|C++day5 运算符重载+静态成员+类的基础【Xmind+实例】

一、运算符重载

 实例:(赋值运算符、自增自减运算符、插入提取运算符)

#include <iostream>using namespace std;class Person
{friend Person & operator+=(Person &L,const Person &R);friend Person & operator++(Person &O);friend const Person operator++(Person &O,int);friend ostream & operator<<(ostream & cout,const Person &p);friend istream & operator>>(istream &cin,Person &p);int a;int b;
public://无参构造函数Person() {}//有参构造函数Person(int a,int b):a(a),b(b){}//成员函数实现+=运算符重载
//    Person & operator+=(const Person &R)
//    {
//        a += R.a;
//        b += R.b;
//        return *this;
//    }//成员函数实现前++运算符重载
//    Person & operator++()
//    {
//        ++a;
//        ++b;
//        return *this;
//    }//成员函数实现后++运算符重载
//    const Person operator++(int)
//    {
//        Person temp;
//        temp.a = a++;
//        temp.b = b++;
//        return temp;
//    }void show(){cout << "a = " << a << endl;cout << "b = " << b << endl;}
};//全局函数实现+=运算符重载
Person & operator+=(Person &L,const Person &R)
{L.a += R.a;L.b += R.b;return L;
}//全局函数实现前++运算符重载
Person & operator++(Person &O)
{++O.a;++O.b;return O;
}
//全局函数实现后++运算符重载
const Person operator++(Person &O,int)
{Person temp;temp.a = O.a++;temp.b = O.b++;return temp;
}//全局函数实现插入
ostream & operator<<(ostream &cout,const Person &p)
{cout << p.a << endl;cout << p.b << endl;return  cout;
}
//全局函数实现提取
istream & operator>>(istream &cin,Person &p)
{cin >> p.a;cin >> p.b;return cin;
}
int main()
{Person p1(10,10);Person p2(20,20);cout << "--------- 实现+= ----------" << endl;//+=p1 += p2;p1.show();cout << "-------- 实现 前++ ---------" << endl;//前++Person p3(10,10);p1 = ++p3;p3.show();p1.show();cout << "-------- 实现 后++ ----------" << endl;//后++Person p4(10,10);p4 = p2++;p2.show();p4.show();cout << "-------- 实现cout ----------" << endl;cout << p1;cout << "-------- 实现cin ----------" << endl;cin >> p2;cout << p2;return 0;
}

二、静态成员

银行账户实例 

#include <iostream>using namespace std;//封装银行账户 类
class BankAccount
{
private:double balance; //余额static double interest_rate; //利率  静态数据成员 属于类的public://无参构造BankAccount() {}//有参构造函数BankAccount(double b):balance(b){}//静态成员函数 获取当前的利率static double getInterestRate(){return interest_rate;}//静态成员函数,设置当前利率static void setInterestRate(double rate){interest_rate = rate;}//静态成员函数 获取连本带利的余额static double getLastMoney(BankAccount &account){return account.balance*(1+interest_rate);}
};double BankAccount::interest_rate = 0.05;  //在类外初始化 静态数据成员int main()
{cout << "当前利率:" << BankAccount::getInterestRate() << endl;BankAccount::setInterestRate(0.03);cout << "当前利率:" << BankAccount::getInterestRate() << endl;BankAccount account1(1000.0);BankAccount account2(2000.0);cout << "第一个人连本带利的余额:" << BankAccount::getLastMoney(account1) << endl;return 0;
}

三、类的继承

实例

#include <iostream>using namespace std;class Person //父类
{
private:string name;int age;
public://无参构造函数Person(){cout << "父类的无参构造函数" << endl;}//有参构造函数Person(string name, int age):name(name),age(age){cout << "父类的有参构造函数" << endl;}//拷贝构造函数Person(Person const &other):name(other.name),age(other.age){cout << "父类的拷贝构造函数" << endl;}//拷贝赋值函数Person & operator=(const Person &p){name = p.name;age = p.age;cout << "父类的拷贝赋值函数" << endl;return *this;}void show(){cout << "父类的show函数" << endl;}~Person(){cout << "父类的析构函数" << endl;}
};class Stu:public Person // 子类/派生类
{
private:int id;int math;
public://无参构造函数Stu(){cout << "子类的无参构造函数" << endl;}//有参构造函数Stu(string name, int age, int id, int math):Person(name,age),id(id),math(math){cout << "子类的有参构造函数" << endl;}//子类的拷贝构造函数Stu(Stu const &p):id(p.id),math(p.math),Person(p){cout << "子类的拷贝构造函数" << endl;}//子类的拷贝赋值函数Stu & operator=(const Stu &p){Person::operator=(p);id = p.id;math = p.math;cout << "子类的拷贝构造函数" << endl;return *this;}void show(){cout << "子类的show函数" << endl;}~Stu(){cout << "子类的析构函数" << endl;}
};
int main()
{
//    cout << "----------------------无参构造函数-------" << endl;
//    Stu p;//    cout << "----------------------有参构造函数-------" << endl;
//    Stu p1("张三",8,1,99);//    cout << "----------------------拷贝构造函数-------" << endl;
//    Stu p2=p1;//    cout << "----------------------show函数-------" << endl;
//    p2.show();
//    p2.Person::show();Stu p1("张三",8,1,99);cout << "----------------------拷贝赋值函数-------" << endl;Stu p2;p2 = p1;return 0;
}

四、多继承

 实例

#include <iostream>using namespace std;
class Sofa
{
private:string sitting;
public://无参构造函数Sofa(){cout<< "Sofa的无参构造函数" << endl;}//有参构造函数Sofa(string sitting):sitting(sitting){cout<< "Sofa的有参构造函数" << endl;}void show(){cout << sitting << endl;}
};
class Bed
{
private:string sleep;
public://无参构造函数Bed(){cout<< "Sofa的无参构造函数" << endl;}//有参构造函数Bed(string sleep):sleep(sleep){cout<< "Sofa的有参构造函数" << endl;}void show(){cout << sleep << endl;}
};class Sofa_Bed:public Sofa,public Bed
{
private:int w;
public://无参构造函数Sofa_Bed(){cout<< "沙发床的无参构造函数" << endl;}//有参构造函数Sofa_Bed(string sit,string sleep,int w):Sofa(sit),Bed(sleep),w(w){cout<< "沙发床的有参构造函数" << endl;}
};
int main()
{//Sofa_Bed s;Sofa_Bed s1("可坐","可睡",5);s1.Sofa::show();s1.Bed::show();return 0;
}

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

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

相关文章

Jira vs Trello:项目管理的深层巅峰对决

引言 项目管理在现代企业运作中起着至关重要的作用。从跨国公司的巨大项目&#xff0c;到创业公司的快速反应&#xff0c;再到个人的日常任务管理&#xff0c;一个好的项目管理工具可以有效地跟踪进度&#xff0c;优化资源分配&#xff0c;确保项目在预定时间内完成。今天&…

数字 IC 设计职位经典笔/面试题(三)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; 1. IC 设计中同步复位与异步复位的区别&#xff1f; 同步复位在时钟沿变化时&#xff0c;完成复位动作。异步复位不管时钟&#xff0c;只要复位信号满足条件&#xff0c;就完成复位动作。异步复位对复位信号要求…

文生图模型之Stable Diffusion

原始文章地址 autoencoder CLIP text encoder tokenizer最大长度为77&#xff08;CLIP训练时所采用的设置&#xff09;&#xff0c;当输入text的tokens数量超过77后&#xff0c;将进行截断&#xff0c;如果不足则进行paddings&#xff0c;这样将保证无论输入任何长度的文本&…

开源的安全性:挑战与机会

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Python练习 函数取列表最小数

练习2&#xff1a;构造一个功能函数&#xff0c;可以解决如下问题&#xff1a; 要求如下&#xff1a; 1&#xff0c;任意输入一个列表&#xff0c;函数可以打印出列表中最小的那个数&#xff0c; 例&#xff1a;输入: 23,56,67,4,17,9 最小数是 &#xff1a;4 方法一: #内置函…

Locked勒索病毒:最新变种locked袭击了您的计算机?

导言&#xff1a; 在数字时代&#xff0c;一场隐秘的威胁正悄然而至&#xff0c;它的名字是.locked勒索病毒。这个黑暗的存在以其狡猾的攻击方式和致命的数据封锁能力&#xff0c;威胁着我们的数字生活。本文91数据恢复将带您深入了解.locked勒索病毒的本质&#xff0c;探索恢…

opencv 案例实战01-停车场车牌识别实战

需求分析&#xff1a; 车牌识别技术主要应用领域有停车场收费管理&#xff0c;交通流量控制指标测量&#xff0c;车辆定位&#xff0c;汽车防盗&#xff0c;高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安&#xff0c;防止交通堵塞…

解决方案:fatal error: openssl/bio.h: 没有那个文件或目录

出现报错如下&#xff1a; 出现该错误的原因有两个&#xff1a; 没有安装openssl或者libssl-dev库Libssl-dev版本过高&#xff0c;需要降级 一. 没有安装openssl或者libssl-dev库 使用指令安装openssl&#xff1a; 我的是已经安装完成了&#xff0c;所以再把libssl-dev的库也…

【SkyWalking】分布式服务追踪与调用链系统

1、基本介绍 SkyWalking是一个开源的观测平台&#xff0c;官网&#xff1a;Apache SkyWalking&#xff1b; 可监控&#xff1a;分布式追踪调用链 、jvm内存变化、监控报警、查看服务器基本配置信息。 2、SkyWalking架构原理 在整个skywalking的系统中&#xff0c;有三个角色&am…

华纳云:ubuntu下nginx服务器如何配置

在Ubuntu操作系统上配置Nginx服务器涉及以下步骤。这里我将提供一个基本的配置示例&#xff0c;你可以根据自己的需求进行修改和定制。 安装 Nginx&#xff1a; 打开终端&#xff0c;并输入以下命令来安装 Nginx&#xff1a; sudo apt update sudo apt install nginx 启动 …

【安装GPU版本pytorch,torch.cuda.is_available()仍然返回False问题】

TOC 第一步 检查cuda是否安装&#xff0c;CUDA环境变量是否正确设置&#xff0c;比如linux需要设置在PATH&#xff0c;window下环境变量编辑看看&#xff0c;是否有CUDA 第二步&#xff0c;核查python中torch版本 首先查看你环境里的pytorch是否是cuda版本&#xff0c;我这…

【KingSCADA】问题处理:记录KS历史报警查询异常

哈喽&#xff0c;大家好&#xff01;我是雷工。 本篇记录KingSCADA的历史报警应用中的一个问题&#xff0c;及处理过程。 一、问题描述 最近客户遇到这么一个问题&#xff1a;当打开历史报警窗界面&#xff0c;自动加载的报警信息中有显示最近几天的报警信息&#xff0c;但当…

Python(八十六)字符串的编码与解码

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

ch3_1汇编语言程序的源程序

mark 一下&#xff0c; 2023.Aug.15 从湖北返回学习&#xff0c;参加了一场学术会议&#xff0c; 看来做学术确实是需要交流的&#xff0c; 尤其该领域的多交流&#xff0c; 还是需要至少一年参加一次学术会议. &#xfeff; 不至于让自己太孤陋寡闻&#xff0c; 局限于自…

vue3学习源码笔记(小白入门系列)------ 组件是如何渲染成dom挂载到指定位置的?

文章目录 os准备组件如何被挂载到页面上第一步 createApp 做了哪些工作&#xff1f;ensureRendererbaseCreateRenderercreateAppAPImountrenderpatchprocessComponentprocessElement 总结 os 学习一下vue3 源码&#xff0c;顺便记录分享下 使用vitest 插件调试源码 辅助阅读 …

layui框架学习(40:数据表格_主要事件)

Layui数据表格模块主要通过各类事件响应工具栏操作、单元格编辑或点击等交互操作&#xff0c;本文学习table数据表格模块中的主要事件及处理方式。   头部工具栏事件。通过代码“table.on(‘toolbar(test)’, function(obj))”获取lay-filter属性为test的数据表格的头部工具栏…

javeee eclipse项目导入idea中

步骤一 复制项目到idea工作空间 步骤二 在idea中导入项目 步骤三 配置classes目录 步骤四 配置lib目录 步骤五 添加tomcat依赖 步骤六 添加artifacts 步骤七 部署到tomcat

Mybatis+MybatisPlus拦截器实战之数据的加解密和脱敏

文章目录 一、前言二、拦截器简介三、代码目录结构简介四、核心代码讲解4.1 application.yml文件4.2 自定义注解4.2.1 SensitiveEntity4.2.2 SensitiveData4.2.3 MaskedEntity4.2.4 MaskedField4.2.5 MaskedMethod 4.3 Mybatis-Plus 拦截器数据自动加密4.4 Mybatis 打印完整sql…

添加了.gitignore 文件,git status 的时候还是显示修改文件

1. 用IAR 软件编译STM32 工程&#xff0c;IAR 会生成很多中间文件&#xff0c;这些文件是不需要加入到git 版本管理里面的 2. .gitignore 文件位置需要放对应目录才会起作用&#xff0c;递归起作用的 3. 如果 .gitignore文件中指定的文件或目录仍然显示在git status的输出中&a…

万字长文:Stable Diffusion 保姆级教程

万字长文&#xff1a;Stable Diffusion 保姆级教程 2022年绝对是人工智能爆发的元年&#xff0c;前有 stability.ai 开源 Stable Diffusion 模型&#xff0c;后有 Open AI 发布 ChatGPT&#xff0c;二者都是里程碑式的节点事件&#xff0c;其重要性不亚于当年苹果发布iPhone&a…