当前位置: 首页 > news >正文

C++ 类的继承与派生

目录

1、继承的概念

2、继承(Inherit)

3、继承方式

4、父子同名成员并存

5、虚函数(virtual)

6、纯虚函数


1、继承的概念

以李白为例

类1是类2的基类(父类),类2是类3的基类(父类)

2、继承(Inherit)

为了实现代码复用

看例子

#include <iostream>
using namespace std;class A {
public:int nA;A() {nA = 1;}void funcA() {cout << "funcA\n";  // \n和endl一样,都是换行}
};class B : public A {    //B公有继承A
public:int nB;B() {nB = 2;}void funcB() {cout << "funcB\n";}
};int main() {B b;b.funcA();  //调用继承得来的方法(父类中的函数)b.funcB();  //调用自己的方法cout << b.nA <<endl;  //调用继承得来的属性cout << b.nB;  //调用自己的属性return 0;
}

B公有继承A

对象B中既有继承得来的属性和方法,也有自己专属的属性和方法

输出结果:

3、继承方式

决定父类成员在子类中的访问控制属性

继承方式也分为:public(公有继承),protected(保护继承),private(私有继承)

父类的private成员不会被子类继承(也有一种说法是可以被子类继承,但不能直接访问)

(爸爸肯定想珍藏一些东西不想给儿子得到...或者说不能直接让儿子得到哈哈哈)

 

4、父子同名成员并存

class Father {
public:int n = 1;void func() {cout << "This is Father";}
};class Son : public Father {
public:int n = 2;void func() {cout << "This is Son";}void set() {n = -2;Father::n = -1;}
};int main() {Son son;son.func();  //直接用默认指子类的cout << endl;son.Father::func();  //用父类名字空间显示指明,则使用的是父类成员cout << endl;son.set();cout << son.n << endl;cout << son.Father::n;return 0;
}

子类中同时两个n和两个func(),一个继承父类的一个自己的

如果我们直接使用,默认是指子类成员

若需要使用父类成员,需用父类名字空间显示指明

运行结果:

 

5、虚函数(virtual)

关键字virtual加在函数名前

父类的虚函数可以在子类中被重写(override) ,即重新实现,但参数和返回值必须保持一致。

·含有虚函数的类叫做虚类

#include <iostream>
using namespace std;class Human {
public:virtual void say() {cout << "I'm human";}
};class Student : public Human {
public:void say() {cout << "I'm a student";  //重写父类的虚函数say()}
};int main() {Student student;student.say();
}

从输出结果我们可以看出,父类的虚函数say()已经被子类重写

6、纯虚函数

不实现,仅声明为纯虚函数,留待子类里重写定义

含有纯虚函数的类叫抽象类,仅有纯虚函数的类叫接口

抽象类和接口不可实例化

#include <iostream>
using namespace std;class Shape {  //只声明这是一个图形
public:virtual float getS() = 0;  //图形就可以求面积,但是不知道是什么图形,所以这里声明为纯虚函数,即让函数等于0
};class Circle : public Shape {  //在子类里重写父类的纯虚函数,定义它是一个圆
private:float radius;
public:Circle(float radius) {this -> radius = radius;}float getS() { return 3.14 * radius * radius; }  //对圆求面积
};int main() {Circle c(1.2);cout << c.getS() << endl;return 0;
}

 

 OK,至此我们已经介绍完了类的三大特性:封装、继承、派生

后面我们会继续介绍类的最后一个特性----多态

创作不易,希望大家可以多多支持,各位的点赞收藏关注就是我持续创作的动力!

写博客不仅是我个人学习和成长的见证,也真心希望这些内容能对大家有所帮助。

相关文章:

C++ 类的继承与派生

目录 1、继承的概念 2、继承&#xff08;Inherit&#xff09; 3、继承方式 4、父子同名成员并存 5、虚函数&#xff08;virtual&#xff09; 6、纯虚函数 1、继承的概念 以李白为例 类1是类2的基类&#xff08;父类&#xff09;&#xff0c;类2是类3的基类&#xff08;父类…...

分布式系统基础理论

CAP是分布式系统方向中的一个非常重要的理论&#xff0c;可以粗略的将它看成是分布式系统的起点&#xff0c;CAP分别代表的是分布式系统中的三种性质&#xff0c;分别是Consistency&#xff08;可用性&#xff09;、Availability&#xff08;一致性&#xff09;、Partition tol…...

HttpServletRequestWrapper的使用与原理

​ 介绍 HttpServletRequestWrapper 实现了 HttpServletRequest 接口&#xff0c;可以让开发人员很方便的改造发送给 Servlet 的请求.HttpServletRequest 对参数值的获取实际调的是org.apache.catalina.connector.Request没有提供对应的set方法修改属性所以不能对前端传来的参…...

PBDB Data Service:List of fossil occurrences(化石产出记录列表)

List of fossil occurrences&#xff08;化石产出记录列表&#xff09; 描述用法参数选择PBDB所有记录&#xff08;all_records&#xff09;以下参数可用于按各种条件查询化石产出记录以下参数可用于筛选所选内容以下参数还可用于根据分类筛选结果列表以下参数可用于生成数据存…...

初识C语言

1. 初识C语言 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。 C语言是一门面向过程的计算机编程语言&#xff0c;它与C,Java等面向对象的编程语言有所不同。 第一个C语言程序&#xff1a; #include<stdio.h>int main(void) {printf("hello worl…...

Leetcode 322. 零钱兑换(完全背包)

Leetcode 322. 零钱兑换&#xff08;完全背包&#xff09;题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&…...

怎么恢复回收站?分享4个宝藏方法!

案例&#xff1a;怎么恢复回收站 【请问大家怎么恢复误删的文件呀&#xff1f;如果回收站被清空了&#xff0c;又应该怎么恢复呢&#xff1f;】 电脑回收站是我们存储被删除文件的地方。但是有时候&#xff0c;我们会不小心把一些重要的文件或者照片误删了。这时候&#xff0…...

大模型混战,最先实现“智慧涌现”的会是谁?

作者 | 曾响铃 文 | 响铃说 几秒钟写出了一篇欢迎词&#xff1b; 小说人物乱入现实&#xff0c;快速创作不重样的故事&#xff1b; 鼠标一点&#xff0c;一封英文工作沟通邮件撰写完成&#xff1b; 准确解出数学应用题&#xff0c;还给出解题步骤&#xff1b; 甚至还能理…...

Powerlink协议在嵌入式linux上的移植和主从站通信(电脑和linux板通信实验)

使用最新的openPOWERLINK 2.7.2源码&#xff0c;业余时间搞定了Powerlink协议在嵌入式linux上的移植和测试&#xff0c;并进行了下电脑和linux开发板之间的通信实验。添加了一个节点配置&#xff0c;跑通了源码中提供的主站和从站的两个demo。这里总结下移植过程分享给有需要的…...

快速理解基本的cookie、session 和 redis

一、Cookie 1、什么是Cookie 1、Cookie实际上是一小段的文本信息&#xff0c;是一种keyvalue形式的字符串。客户端请求服务器&#xff0c;如果服务器需要记录该用户状态&#xff0c;就使用response向客户端浏览器颁发一个Cookie。客户端会把Cookie保存起来。 2、当浏览器再请求…...

STANet代码复现出现的问题

1 IndexError: boolean index did not match indexed array along dimension 0; dimension is 4194304 but corresponding boolean dimension is 65536定位到导致错误的代码&#xff0c;是metric.py&#xff0c;Collect values for Confusion Matrix 收集混淆矩阵的值时出错 …...

Java 中String对象详解

Java语言中的String对象是一个非常常见的数据类型&#xff0c;大多数情况下我们都是在使用String对象来表示字符串类型的数据。Java中的String类是一个final class&#xff0c;它是不可被继承的。本文将对Java中的String对象进行详细全面的描述&#xff0c;包括以下几个方面&am…...

k8s nfs运行问题、etcd问题、calico网络问题

服务器重启后nfs运行问题导致服务不能正常重启 解决办法 在每个节点下使用如下命令进行查看nfs是否正常启动 systemctl status nfs 如果没有启动&#xff0c;则使用如下命令启动&#xff0c;保证三个节点下的nfs都正常启动 systemctl start nfs 再次查看nfs是否正常启动 syst…...

Qt--QString字符串类、QTimer定时器类

目录 1. QString 字符串类 dialog.cpp 2. 容器类 2.1 顺序容器 QList 示例代码&#xff1a; student.h student.cpp dialog.h dialog.cpp 运行结果&#xff1a; 2.2 关联容器 QMap 示例代码&#xff1a; dialog.h dialog.cpp 运行结果&#xff1a; 3. Qt类型 3.1 跨平台数据类型…...

2023.5.13>>Eclipse+exe4j打包Java项目及获取exe所在文件的路径

Eclipseexe4j打包Java项目及获取exe所在文件的路径 1、打包exe文件1.1 打jar包1.2 打包exe2、在程序中获取exe所在路径3、遇到问题4、JDK version和class file version(Class编译版本号)对应关系5、参考文章 1、打包exe文件 1.1 打jar包 右单击项目选择“Export…” 1.2…...

Centos系统的使用基本教程

Centos是一款流行的Linux操作系统&#xff0c;它基于Red Hat Enterprise Linux系统&#xff0c;是一款稳定、可靠、安全的操作系统。本文将介绍Centos系统的基本使用方法&#xff0c;包括安装、命令行操作、软件安装和系统管理等方面的内容。 安装Centos系统 Centos系统可以从…...

IDEA生成ER图、UML类图、时序图、流程图等的插件推荐或独立工具推荐

以下是几个常用的IDEA插件和独立工具&#xff0c;可以用于生成ER图、UML类图、时序图、流程图等&#xff1a; Visual Paradigm (独立工具) Visual Paradigm是一个强大的建模工具&#xff0c;可以生成UML类图、时序图、流程图等。它支持多种语言和框架&#xff0c;包括Java、Spr…...

Python心经(3)

这一节总结点demo和常用知识点 目录 有关字符串格式化打印的 lambda匿名函数&#xff0c;&#xff0c;将匿名函数作为参数传入 文件读写 生成器 python的装饰器 简单的网站代码&#xff1a; 有关三元运算 推导式&#xff1a; 新浪面试题&#xff1a; 有关面向对象里…...

单工,半双工,全双工通讯

对于点对点之间的通信&#xff0c;按照消息传送的方向与时间关系&#xff0c;通信方式可分为单工通信、半双工通信及全双工通信三种。 单工通信 单工通信&#xff08;Simplex Communication&#xff09;是指消息只能单方向传输的工作方式。 在单工通信中&#xff0c;通信的信…...

【2023-05-09】 设计模式(单例,工厂)

2023-05-09 设计模式&#xff08;单例&#xff0c;工厂&#xff09; 单例模式 顾名思义&#xff0c;就是整个系统对外提供的实例有且只有一个 特点&#xff1a; ​ 1、单例类只有一个实例 ​ 2、必须是自己创建唯一实例 ​ 3、必须给所以对象提供这个实例 分类&#xff…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...