四、C++ 类的继承

news2025/7/29 0:28:31

文章目录

  • 一、引言
    • 1.1 类成员的三种类型
    • 1.2 访问控制和继承
  • 二、类的继承
    • 2.1 格式
    • 2.2 继承类型
  • 三、多继承

一、引言

1.1 类成员的三种类型

我们知道,在类中一共有三种类型,分别为public,private和protected,默认为private,在结构中,默认是public

1.2 访问控制和继承

在这里插入图片描述

可见,在一个类中,只有类内的成员才可以访问private

二、类的继承

2.1 格式

继承允许我们依据一个类来创建一个类,这个已有的类称为基类,新创建的类称为派生类

class derived-class: access-specifier base-class1,access-specifier class2 ......

2.2 继承类型

  • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
  • 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
  • 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
  • 代码实现:
    #include <iostream>
    
    using namespace std;
    
    // 定义基类
    class Student
    {
    public:
        char name;
    
    private:
        int age;
    
    protected:
        double height;
    };
    //
    // public继承:可以访问public,portected
    // public-->public
    // protected-->protected
    class Public : public Student
    {
    public:
        void set_name(char name);
        char get_name(void);
    };
    
    void Public::set_name(char na)
    {
        name = na;
    }
    
    char Public::get_name()
    {
        return name;
    }
    //
    
    // private继承:可以访问public,portected
    // public-->private
    // protected-->private
    class Private : private Student
    {
    public:
        void set_name(char name);
        char get_name(void);
    };
    
    void Private::set_name(char na)
    {
        name = na;
    }
    
    char Private::get_name()
    {
        return name;
    }
    /
    // protected继承可以访问public,portected
    // public-->portected
    // protected-->portected
    class Protect : protected Student
    {
    public:
        void set_height(double hei);
        double get_height(void);
    
    };
    
    void Protect::set_height(double hei){
        height = hei;
    }
    
    double Protect::get_height(void){
        return height;
    }
    
    ///
    int main()
    {
        Public student1;
        student1.set_name('a');
        cout << "name of student1:" << student1.get_name() << endl;
    
        Private student2;
        student2.set_name('b');
        cout << "name of student2:" << student2.get_name() << endl;
    
        Protect student3;
        student3.set_height(30.0);
        cout<<"height of student3:"<< student3.get_height()<<endl;
    
    }
    
  • 运行结果:
    name of student1:a
    name of student2:b
    height of student3:30
    

三、多继承

有时候,一个派生类可以从多个基类中继承,这种继承方式称为多继承

  • 格式:
    class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,{
    <派生类类体>
    };
    
  • 代码实现:
    #include <iostream>
    
    using namespace std;
    
    // 基类1
    class Shape
    {
    public:
        void set(double w, double h);
    
    protected:
        double height;
        double weight;
    };
    
    void Shape::set(double w, double h)
    {
        height = h;
        weight = w;
    }
    
    // 基类2
    
    class Cost
    {
    public:
        double cost(double area);
    };
    
    double Cost::cost(double area)
    {
        return area * 100;
    }
    // 派生类
    class Rectangle : public Shape, public Cost
    {
    public:
        double get_area();
    };
    
    double Rectangle::get_area()
    {
        return height * weight;
    }
    
    int main()
    {
        Rectangle rec;
        rec.set(20.333, 2.22323);
        double area = rec.get_area();
        cout << rec.cost(area) << endl;
        return 0;
    }
    
    

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

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

相关文章

redhat6.5安装nvidia驱动

iso&#xff1a;redhat6.5 1、下载安装NVIDIA显卡驱动 1.1 打开终端 1.2 输入下方代码进行查看自己的显卡型号 lspci |grep -i nvidia 2、在官网下载对应的驱动&#xff1a; 官方驱动 | NVIDIA 3、禁用nouveau驱动 3.1 禁用默认的nouveau&#xff0c;据说这是NVIDIA显卡…

yolox原理

目录 1 Decoupled Head 1.1 YOLOX的解耦头结构思考 2 Data Augmentation 别人讲的好的文章&#xff0c;yolox作者写的 以下正文部分内容&#xff0c;参考该链接 如何评价旷视开源的YOLOX&#xff0c;效果超过YOLOv5? - 知乎感谢大家对旷视开源的 YOLOX 关注&#xff0c;本…

数字化外协生产综合管理系统,实现信息自动同步,数据自动统计分析!

随着市场经济的不断发展&#xff0c;制造生产行业竞争不断加剧&#xff0c;精细化、无纸化办公已成为生产企业生存和发展的基本条件。要想将企业内部管理做的更精更细&#xff0c;就必须借助于现代先进的企业管理手段和工具&#xff0c;如企业资源计划系统、生产管理系统等。 …

Linux安装Apache(解压版)

安装依赖 yum -y install gcc perl wget make pcre-devel openssl-devel expat-devel 安装目录 mkdir /opt/apache && cd /opt/apache 安装包下载 wget https://dlcdn.apache.org/apr/apr-1.7.0.tar.gz --no-check-certificate wget https://dlcdn.apache.org/apr/apr-…

谈谈数据分析晓知识

随着数字化转型普遍开展,数据分析飞速发展。无论您的组织属于哪个行业,数据分析都可能在制定战略中发挥着关键作用。许多公司现在都有数据分析师,他们对原始数据采用数据挖掘技术,从这个过程中获得的许多可行的洞察和见解。 同时,数据分析软件市场迅速攀升。根据IDC的数据…

【iOS-UIImagePickerController访问相机和相册】

文章目录记录UIImagePickerControllerUIImagePickerController的sourceType主要代码点击imageView事件跳转到相机和相册![请添加图片描述](https://img-blog.csdnimg.cn/0a5a307de371421eba7e3472075dcaeb.png)总结记录 在写知乎日报的时候用到过imageVIew点击事件&#xff0c…

函数式编程

Lambda表达式介绍 Lambda简介 Lambda 表达式是 JDK8 的一个新特性&#xff0c;可以取代大部分的匿名内部类&#xff0c;写出更优雅的 Java 代码&#xff0c;尤其在集合的遍历和其他集合操作中&#xff0c;可以极大地优化代码结构。 在Java语言中&#xff0c;可以为变量赋予一…

连续六个季度实现盈利改善,达达集团内外双重确定性凸显

当消费迈向复苏时&#xff0c;今年的社会消费品零售也在总额恢复增长的情况下&#xff0c;迎来结构性变化。 其中&#xff0c;一股消费力量的加速增长成为了重点——即时零售。今年7月&#xff0c;商务部在官网发布的《2022年上半年中国网络零售市场发展报告》&#xff0c;首次…

VOACAP 软件的下载与安装

VOACAP 简介 VOACAP(Voice of America Coverage Analysis Program&#xff0c;美国之音覆盖分析程序)软件是NTIA/ITS开发的高频规划软件包 ITS HF Propagation 中的一个电路计算模块&#xff0c;它是对原 ITS IONCAP 模块(高频传输系统应用预测模块之一)的改进&#xff0c;并根…

LogTAD:无监督跨系统日志异常域检测

摘要 日志异常检测&#xff0c;其对开发稳定、可持续的系统具有重要意义。但当系统刚上线时&#xff0c;收集足够的数据训练一个无监督模型是不现实的。为此本文提出了一个可转移的日志异常检测(LogTAD)框架&#xff0c;该框架利用对抗域适应技术使来自不同系统的日志数据具有…

小程序最新获取用户头像昵称

目录 一、前言 二、遇到的问题 三、效果页面 四、代码实现 记录&#xff1a; 一、前言 昨天打开编辑器后&#xff0c;发现小程序用户的头像与昵称都给变默认了&#xff0c;就去网上搜了一下&#xff1a; 小程序用户头像昵称获取规则调整公告 | 微信开放社区 我去&…

Spring6整合JUnit5

十七、Spring6整合JUnit5 17.1 Spring对JUnit4的支持 准备工作&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

[附源码]java毕业设计暖暖猫窝系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux之软连接和硬连接的用法和区别【详细!!!】

目录软连接创建一个软连接删除软连接硬链接创建硬链接删除硬链接硬链接和软连接之间的区别软连接 创建一个软连接 ln -s [源文件或目录] [软连接名称] 例子&#xff1a; 在/home目录下创建一个软连接linkToRoot 链接到/root目录 删除软连接 rm -f /linkToRoot例子&#x…

供应CAS:73342-16-2,N3-PEG-OH,Azide-PEG-Hydroxy,叠氮-聚乙二醇-羟基

一&#xff1a;产品描述 1、名称 英文&#xff1a;N3-PEG-OH&#xff0c;Azide-PEG-Hydroxy 中文&#xff1a;叠氮-聚乙二醇-羟基 2、CAS编号&#xff1a;73342-16-2 3、所属分类&#xff1a;Azide PEG Hydroxyl PEG 4、分子量&#xff1a;可定制&#xff0c;叠氮-PEG 34…

[附源码]java毕业设计某公司酬薪管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

无需重启应用,动态采集任意点位日志

作者&#xff1a; 屿山 现实系统往往有着较高的复杂度&#xff0c;我们借助 Trace、Log、Metric 三驾马车使我们的系统具备了一定的可观测性&#xff0c;但观测位置和信息往往是固定的&#xff0c;而我们所遇到的问题常常是意料之外的&#xff0c;这就导致我们能够定位问题的范…

BLE学习(1):蓝牙协议栈的介绍

蓝牙官方(The Bluetooth Special Interest Group)定义了低功耗蓝牙(Bluetooth low energy,即LE)和基础/增强速率蓝牙(Bluetooth basic rate/enhanced data rate ,即BR/EDR)两种技术的协议栈。这两种协议栈可以单独使用&#xff0c;也可以同时使用&#xff0c;如下图所示&#x…

泛型「generic」讲解

标题1. 泛型语法1.1 泛型的引出1.2 泛型介绍1.3 泛型语法1.4 泛型使用细节1.5 练习题2.自定义泛型2.1自定义泛型-类2.2自定义泛型-接口2.3自定义泛型-方法2.4练习题3.范型继承和通配符3.1JUnit单元测试框架3.2练习题1. 泛型语法 1.1 泛型的引出 传统方法不能对加入到集合中的…

Docker部署ELK

Docker部署ELK安装包下载1、安装docker2、安装docker compose3、使用docker加载离线镜像4、上传yml文件并初始化密码5、造数据&#xff0c;看采集结果安装包下载 链接:https://pan.baidu.com/s/1LOHyhTHm3-30v6wAfYLTAg 提取码:5uno 1、安装docker &#xff08;1&#xff09…