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

news2024/12/26 22:15:27

一、运算符重载

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

#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.coloradmin.cn/o/928609.html

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

相关文章

RabbitMQ 集群

clustering 最开始我们介绍了如何安装及运行 RabbitMQ 服务&#xff0c;不过这些是单机版的&#xff0c;无法满足目前真实应用的要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况&#xff0c;该怎么办&#xff1f;单台 RabbitMQ服务器可以满足每秒 100…

DDR与PCIe:高性能SoC的双引擎

SoC芯片无处不在&#xff0c;小到家电控制的MCU&#xff0c;大到手机芯片&#xff0c;我们都会接触到。如今大部分芯片设计公司都在开发SoC芯片&#xff0c;一颗SoC芯片可以集成越来越多的功能&#xff0c;俨然它已成为IC设计业界的焦点。 高性能、高速、高带宽的互联和存储的…

SpringIoC基于注解配置

目录 一、Bean注解标记和扫描 (IoC) 二、组件&#xff08;Bean&#xff09;作用域和周期方法注解 三、Bean属性赋值&#xff1a;引用类型自动装配 (DI) 四、Bean属性赋值&#xff1a;基本类型属性赋值 (DI) 一、Bean注解标记和扫描 (IoC) 一、注解方式介绍 1.注解介绍 和…

不同版本.net引用同一个项目

项目文件.csproj文件内容如下&#xff1a; 重点是&#xff1a;不能有其他的 netstandard2;net40;net45;net46;net6 <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><TargetFrameworks>netstandard2;net40;net45;net46;net6</TargetFrame…

学习pytorch5 常用的transforms

常用的transforms 1. ToTensor()2. Normalize() 1. ToTensor() 2. Normalize() # 1. ToTensor 把PIL图片类型数据或ndarry numpy数据类型转换为tensor类型数据 from cv2 import imread from torchvision import transforms from torch.utils.tensorboard import SummaryWrit…

Java | IDEA中Netty运行多个client的方法

想要运行多个client但出现这种提示&#xff1a; 解决方法 1、打开IDEA&#xff0c;右上角找到下图&#xff0c;并点击 2、勾选

2023.8.26-2023.9.3 周报【3D+GAN+Diffusion基础知识+训练测试】

目录 学习目标 学习内容 学习时间 学习产出 学习目标 1. 3D方向的基础知识 2. 图像生成的基础知识&#xff08;GAN \ Diffusion&#xff09; 3. 训练测试GAN和Diffusion 学习内容 1. 斯坦福cv课程-3D &#xff08;网课含PPT&#xff09; 2. sjtu生成模型课件 3. ge…

截止到目前全国全量在营企业数量有多少?

企业是现代经济社会中最重要的参与主体&#xff0c;它的每一项行为都直接或者间接地关联社会经济总量的变化。 企业数量有什么作用&#xff1f; 谈到企业数量&#xff0c;我们会想到相关行业发展&#xff0c;就业岗位&#xff0c;经济发展等方面的关联。但其实早在13年&#…

限时 180 天,微软为 RHEL 9 和 Ubuntu 22.04 推出 SQL Server 2022 预览评估版

导读近日消息&#xff0c;微软公司今天发布新闻稿&#xff0c;宣布面向 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;9 和 Ubuntu 22.04 两大发行版&#xff0c;以预览模式推出 SQL Server 2022 评估版。 近日消息&#xff0c;微软公司今天发布新闻稿&#xff0c;宣布…

迅镭激光高功率激光切割设备中标中国机械500强露笑集团!

近日&#xff0c;迅镭激光与中国机械500强、中国民营企业制造业500强露笑集团达成战略合作&#xff0c;成功签约10套激光切割设备&#xff0c;其中包括5套GK系列高功率光纤激光切割机、2套GI系列高功率光纤激光切割机、3套光纤激光切管机&#xff0c;这些设备将用于露笑集团全资…

CSS概念

1、CSS与HTML结合方式 1.1 第一种方式 内联/行内样式 就是在我们的HTML标签上通过style属性来引用CSS代码。 优点:简单方便 &#xff1b; 缺点:只能对一个标签进行修饰。 1.2 第二种方式 内部样式 我们通过<style>标签来声明我们的CSS. 通常<style>标签我们推荐写在…

性能优化——分库分表

1、什么是分库分表 1.1、分表 将同一个库中的一张表&#xff08;比如SPU表&#xff09;按某种方式&#xff08;垂直拆分、水平拆分&#xff09;拆分成SPU1、SPU2、SPU3、SPU4…等若干张表&#xff0c;如下图所示&#xff1a; 1.2、分库 在表数据不变的情况下&#xff0c;对…

CPU的基本知识介绍

相信大家对CPU一定不陌生了,从小就耳濡目染了,不过想搞清楚CPU的工作原理,并不是一件简单的事情&#xff0c;毕竟迄今为止,CPU的制造仍然是人类科技的巅峰。下面我们以SIT测试为主&#xff0c;简单的介绍下CPU,至于其工作原理,就不在此做详述。 CPU(Central Processing Unit&a…

配置开启Hive远程连接

配置开启Hive远程连接 Hive远程连接默认方式远程连接Hive自定义身份验证类远程连接Hive权限问题额外说明 Hive远程连接 要配置Hive远程连接&#xff0c;首先确保HiveServer2已启动并监听指定的端口 hive/bin/hiveserver2检查 HiveServer2是否正在运行 # lsof -i:10000 COMMA…

12. Oracle中case when详解

格式&#xff1a; case expression when condition_01 then result_01 when condition_02 then result_02 ...... when condition_n then result_n else result_default end 表达式expression符合条件condition_01&#xff0c;则返回…

[matlab]matlab配置mingw64编译器

第一步&#xff1a;下载官方绿色版本mingw64编译器然后解压放到一个非中文空格路径下面 比如我mingw64-win是我随便改的文件名&#xff0c;然后添加环境变量&#xff0c;选择用户或者系统环境变量添加下面的变量 变量名&#xff1a; MW_MINGW64_LOC 变量值&#xff1a;自己的m…

Windows如何部署Redis

一、简介 Redis (Remote Dictionary Server) 是一个由意大利人 Salvatore Sanfilippo 开发的 key-value 存储系统&#xff0c;具有极高的读写性能&#xff0c;读的速度可达 110000 次/s&#xff0c;写的速度可达 81000 次/s 。 二、下载 访问 https://github.com/tporadows…

如何在jdk中导入CA证书

今天在我们的测试环境就出现了如下问题&#xff0c;单点登录对方的系统突然访问不了了&#xff0c;抓取后台日志发现是如下报错 javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath…

续写哈弗传奇,枭龙能行吗?

作者 | 魏启扬 来源 | 洞见新研社 上市发布会上&#xff0c;品牌高管信心满满的表示&#xff0c;“要做每个时代最好的SUV”。 上市45天后&#xff0c;这款新车迎来了第1万台车辆的下线。 上市3个月后&#xff0c;新车的影响力持续扩散&#xff0c;“四驱平权”的概念被越来…

element-ui table中使用type=‘selection‘ 实现禁用,勾选,默认选中不可修改 三种状态显示问题

element-ui table中使用type‘selection’ 实现禁用&#xff0c;勾选&#xff0c;默认选中不可修改 三种状态显示问题 实现效果 需求 1.status‘CheckOk 时 勾选框默认选中但不可修改勾选状态 2.status‘CheckFail 时 勾选框禁用 3.status‘ 时 勾选框可以勾选 实现思路 采…