继 承

news2025/7/11 15:01:52

1.继承

继承是面向对象三大特性之一

有些类与类之间存在特殊的关系

继承的好处: 减少重复代码

语法: class 子类: 继承方式 父类

子类也称为派生类 父类也称为基类

class Python : public BasePage {

public :

void Content() {

}

};

2.继承方式

继承方式一共有三种:

公共继承

保护继承

私有继承

父类中所有非静态成员属性都会被子类继承下去

父类中私有成员属性是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了

3.继承中构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

问题: 父类和子类的构造和析构顺序是谁先谁后?

先构造父类,再构造子类,析构的顺序与构造的顺序相反

4.继承同名成员处理方式

问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

访问子类同名成员直接访问即可

访问父类同名成员需要加作用域

class base {

public :

int m_A;

base() {

m_A = 100;

}

void func() {

cout << "base的调用" << endl;

}

void func(int num) {

cout << "base的重载"<<num <<endl;

}

};

class bnn : public base {

public:

int m_A;

bnn() {

m_A = 120;

}

void func() {

cout << "bnn的调用" << endl;

}

};

void test012() {

bnn b;

cout << " ban下m_A " << b.m_A << endl;

//如果通过子类对象访问到父类中同名成员,需要加作用域

cout << " base下m_A " << b.base::m_A << endl;

b.func();//直接调用调用是子类中的同名成员

//如何调用到父类中同名成员函数?

b.base::func();

//如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数

//如果想访问到父类中被隐藏的同名成员函数,需要加作用域

b.base::func(110);

}

5.继承同名静态成员处理方式

问题: 继承中同名的静态成员在子类对象上如何进行访问?

静态成员和非静态成员出现同名,处理方式一致

访问子类同名成员直接访问即可

访问父类同名成员需要加作用域

class Base {

public :

static int m_A;

static void func() {

cout << "Base static void func() " << endl;

}

static void func(int) {

cout << "Base static void func() " << endl;

}

};

int Base::m_A = 120;//类外初始化

class Son : public Base

{

public :

static int m_A;

static void func() {

cout << "Son static void func() " << endl;

}

};

int Son::m_A = 23;//类外初始化

//同名静态成员函数

void test013() {

//1.通过对象访问

cout << "通过对象访问: " << endl;

Son s;

cout << "son下的m_A =" << s.m_A << endl;

cout << "Base下的m_A =" << s.Base::m_A << endl;

//2.通过类名访问

cout << "通过类名访问: " << endl;

cout << "son下的m_A =" << Son::m_A << endl;

//第一个::代表通过类名方式访问 第二个::代表访问父类作用域下

cout << "Base下的m_A =" << Son::Base::m_A << endl;

//1.通过对象访问

s.func();

s.Base::func();

//2.通过类名访问

Son::func();

Son::Base::func();

// 子类出现和父类同名静态成员函数,也会隐藏父类中所有同名成员函数

// 如果想访问父类中被隐藏同名成员,需要加作用域

Son::Base::func(100);

}

6.多继承语法

C++允许一个类继承多个类

语法: class 子类∶ 继承方式 父类1,继承方式 父类2 --

多继承中如果父类中出现了同名情况,子类使用时候要加作用域

C++实际开发中不建议用多继承

class Son : public Base , private bnn

{

};

7.菱形继承

菱形继承概念;

两个派生类继承同一个基类

又有某个类同时继承者两个派生类

这种继承被称为菱形继承,或者钻石继承

//动物类

class Animal

{

public :

int m_Age;

};

//利用虚继承 解决 菱形继承的问题

//继承之前加上关键字 virtual 变为虚继承

// Animal类称为虚基类

//羊类

class Sheep :virtual public Animal{};

//驼类

class Tuo : virtual public Animal{};

//羊驼类

class SheepTuo : public Sheep, public Tuo {

};

void test123() {

SheepTuo st;

st.Sheep::m_Age = 18;

st.Tuo::m_Age = 38;

// 当菱形继承,两个父类拥有相同数据,需要加以作用域区分

cout << "st.Sheep: :m_Age = " << st.Sheep:: m_Age << endl;

cout << "st.Tuo : :m_Age = " << st.Tuo::m_Age << endl;

cout << "st.m_Age = " << st.m_Age << endl;

//这份数据我们知道只有有一份就可以,菱形继承导致数据有两份,资源浪费

}

本质:继承两个指针,两个指针指向偏移量

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

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

相关文章

Homekit智能家居一智能吸顶灯

买灯要看什么因素 好灯具的灯光可以说是家居的“魔术师”&#xff0c;除了实用的照明功能外&#xff0c;对细节的把控也非常到位。那么该如何选到一款各方面合适的灯呢&#xff1f; 照度 可以简单理解为清晰度&#xff0c;复杂点套公式来说照度光通量&#xff08;亮度&#x…

ChatGPT为什么不受开发者喜欢?

记得 ChatGPT 最开始上线不久的时候&#xff0c;看到的大部分尝鲜和测试结果都是开发者在做进行敲代码测试&#xff0c;可以说职业危机感非常强的一群人了。 再者&#xff0c;加上 ChatGPT 要使用起来其实是有一些技术门槛的&#xff0c;愿意折腾的人也多是程序员&#xff0c;…

操作系统和进程的资源消耗

free -h 获取操作系统当前内存Mem 行(第二行)是内存的使用情况。Swap 行(第三行)是交换空间的使用情况。total 列显示系统总的可用物理内存和交换空间大小。used 列显示已经被使用的物理内存和交换空间。free 列显示还有多少物理内存和交换空间可用使用。shared 列显示被共享使…

基于龙芯 2K1000 的嵌入式 Linux 系统移植和驱动程序设计(一)

2.1 需求分析 本课题以龙芯 2K1000 处理器为嵌入式系统的处理器&#xff0c;需要实现一个完成的嵌入式软件系统&#xff0c;系统能够正常启动并可以稳定运行嵌入式 Linux。设计网络设备驱 动&#xff0c;可以实现板卡与其他网络设备之间的网络连接和文件传输。设计 PCIE 设备驱…

自定义Ext JS组件类

在Ext JS 中如何自定义一个组件类呢? 实现方式是继承Ext.Component ,定义一个自己的组件类。 那么,这个组件类该怎样扩展自己的功能呢? 举例来说, 有这样一个需求: 扩展一个Grid的子类,通过pageType的属性值来显示不同的列。 如果是查看页面,则所有列都是不可编辑的如…

尚医通 (二十)预约挂号功能

目录一、预约挂号详情1、需求2、预约挂号详情接口3、预约挂号详情前端二、预约确认1、需求2、预约确认接口3、预约确认前端一、预约挂号详情 1、需求 接口分析 &#xff08;1&#xff09;根据预约周期&#xff0c;展示可预约日期数据&#xff0c;按分页展示 &#xff08;2&…

【微信小程序】使用云存储存入指定文件夹

前言在我们开发微信小程序的时候常会用到云开发的功能&#xff0c;它相比传统的SQL上手难度低&#xff0c;比较适合没有什么后端基础的开发者使用。在具体的项目需求中我们会让用户上传一些图片或者表格&#xff0c;随着用户量增大&#xff0c;文件类型增多&#xff0c;云存储分…

张驰咨询2023年企业如何活下去、甚至有效增长?

2023年企业活下去和有效增长的关键在于适应和应对不断变化的市场和环境。以下是几点建议&#xff1a; 数字化转型&#xff1a;随着数字化的普及&#xff0c;企业需要加快数字化转型&#xff0c;提高数字化技术的应用水平。这样可以提高企业的生产效率、管理效率和创新能力。 …

2023年谷歌seo排名优化指南

本文主要分享2023年关于谷歌排名机制变化以及如何提升谷歌排名的一些方法。 本文由光算创作&#xff0c;有可能会被剽窃和修改&#xff0c;我们佛系对待这种行为吧。 2023年&#xff0c;谷歌搜索引擎对于SEO的优化策略已经发生了一些变化&#xff0c;要想保持网站在谷歌搜索中…

Javaweb之mybits入门

2.1 Mybatis概述 2.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github …

挣值管理案例讲解

一、概念1.挣值管理是一种综合了范围、时间、成本绩效测量的方法。通过与计划完成的工作量、实际挣得的收益、实际的成本进行比较&#xff0c;可以确定成本、进度是否按计划进行。挣值管理可以在项目某一特定时间点上&#xff0c;从达到范围、时间、成本三项目标上评价项目所处…

1.2 学习环境准备

文章目录1.MariaDB简介2.MariaDB服务端和客户端安装1.MariaDB简介 因为MariaDB作为MySQL的延申&#xff0c;其包含MySQL所有的有点&#xff0c;并且其包含了更丰富的特性。比如微秒的支持、线程池、子查询优化、组提交、进度报告等&#xff1b; 所以我们接下来将已MariaDB作为…

TCP多线程并发IO阻塞服务模型

1. 多进程并发服务器 在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互…

狂神说:流程控制——顺序选择循环结构

System.out.println(10) // 输出带回车 System.out.print(10) // 输出没有回车一、顺序机构挨个往下写&#xff0c;就是最基本的顺序结构二、选择结构 if、switchif单选择结构虽然简单&#xff0c;但也挺经常用的Scanner scanner new Scanner(System.in); // 和下面的…

毕业后想从事软件测试,现在需要学习哪些内容呢

在你选择学习之前&#xff0c;要先考虑一下这个是不是你喜欢的发展方向&#xff0c;而不是只听别人推荐就直接做了选择先了解下软件测试是做什么的以及未来发展前景&#xff0c;最后才是如何自学 软件测试就是在测试这个软件是不是能够完全按照需求运行。软件测试岗再简单点说…

基于JAVAWEB的出租车管理系统

摘要在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括出租车管理系统的网络应用&#xff0c;在国外出租车管理已经是很普遍的方式&#xff0c;不过国内的出租车管理可能还处于起步阶段。出租车管理系统具有出租、归还等功能。…

分布式之如何突破raft集群写数据性能瓶颈

写在前面 在分布式之Raft共识算法分析 一文中我们分析了当前比较常用的raft共识算法&#xff0c;通过raft算法我们可以很容易搭建集群并选举leader&#xff0c;然后由leader负责数据的写操作&#xff0c;这样也可以很容易的解决数据一致性的问题&#xff0c;但是只由leader来处…

C# 表达式树

lambda作为实现表达式树的一种方式&#xff0c;在开始学习表达式树之前&#xff0c;需要对lambda进行一些了解 表达式lambda&#xff0c;定义&#xff1a; (input-parameters) > expression 语句lambda&#xff0c;定义&#xff1a; (input-parameters) > { <sequen…

简单一招教你给大量视频添加srt字幕

很多小伙伴们在剪辑视频的同时需要给视频的画面中添加上srt字幕&#xff0c;那在有很多视频都要添加字幕的时候&#xff0c;就非常的费时&#xff0c;今天小编就给大家分享一个可以批量给大量视频添加srt字幕的简单方法&#xff0c;有需要的小伙伴可以进来看看具体步骤哦&#…

highlight.js高亮npm安装常见问题

目录 安装 highlight.js 安装 vue-highlightjs 安装highlightjs/vue-plugin main.js配置 最近在写低代码&#xff0c;有需求类似编辑器功能&#xff0c;实现代码高亮&#xff0c;然后用到了highlight.js&#xff0c;就整理一下。 官网链接直达 highlight.js 中文文档 安装 h…