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

C++:继承

继承:

继承的基本语法: 

继承是面向对象三大特性之一:
我们发现,定义这些类,下级别的成员除了拥有上一级的共性,还有自己的特性。
这个时候我们就可以考虑利用继承的技术,减少重复代码。
继承的好处:可以减少重复的代码
继承的基本语法:
class A : public B;
A 类称为子类 或 派生类
B 类称为父类 或 基类
派生类中的成员,包含两大部分
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过过来的表现其共性,而新增的成员体现了其个性。
例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不
接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处

先写一个普通的实现方式:

#include <iostream>
using namespace std;//普通实现://Java页面
class Java
{
public:void header(){cout << "首页、公开课、登录、注册...(公共头部)" << endl;}void footer(){cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;}void left(){cout << "Java,Python,C++...(公共分类列表)" << endl;}void content(){cout << "JAVA学科视频" << endl;}
};class Python
{
public:void header(){cout << "首页、公开课、登录、注册...(公共头部)" << endl;}void footer(){cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;}void left(){cout << "Java,Python,C++...(公共分类列表)" << endl;}void content(){cout << "Python学科视频" << endl;}
};//C++页面
class CPP
{
public:void header(){cout << "首页、公开课、登录、注册...(公共头部)" << endl;}void footer(){cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;}void left(){cout << "Java,Python,C++...(公共分类列表)" << endl;}void content(){cout << "C++学科视频" << endl;}
};void test01()
{//Java页面cout << "Java下载视频页面如下: " << endl;Java ja;ja.header();ja.footer();ja.left();ja.content();cout << "--------------------" << endl; //Python页面cout << "Python下载视频页面如下: " << endl;Python py;py.header();py.footer();py.left();py.content();cout << "--------------------" << endl;//C++页面cout << "C++下载视频页面如下: " << endl;CPP cp;cp.header();cp.footer();cp.left();cp.content();
}int main()
{test01();system("pause");return 0;
}

运行结果: 

继承实现:

//继承实现://公共页面  :公共信息
class BasePage     //把重复的东西抽象成公共的
{
public:void header(){cout << "首页、公开课、登录、注册...(公共头部)" << endl;}void footer(){cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;}void left(){cout << "Java,Python,C++...(公共分类列表)" << endl;}
};//继承的好处 减少重复的代码
// 语法 class 子类:继承方式 父类
// 子类 也称为 派生类
// 父类 也称为 基类
//写新的学科继承公共的信息
//Java页面  class Java :public BasePage
{
public:void content()       //写下自己的特点{cout << "JAVA学科视频" << endl;}
};//Python页面
class Python : public BasePage
{
public:void content()         //写下自己的特点{cout << "Python学科视频" << endl;}
};//C++页面
class CPP : public BasePage
{
public:void content()            //写下自己的特点{cout << "C++学科视频" << endl;}
};void test01()
{//Java页面cout << "Java下载视频页面如下: " << endl;Java ja;ja.header();ja.footer();ja.left();ja.content();cout << "--------------------" << endl;//Python页面cout << "Python下载视频页面如下: " << endl;Python py;py.header();py.footer();py.left();py.content();cout << "--------------------" << endl;//C++页面cout << "C++下载视频页面如下: " << endl;CPP cp;cp.header();cp.footer();cp.left();cp.content();
}
int main()
{test01();system("pause");return 0;
}

继承方式:

继承的语法: class 子类 : 继承方式 父类
继承方式一共有三种:
公共继承
保护继承
私有继承
//继承方式class Base1      //父类
{
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son1 :public Base1
{void func(){m_A = 10;     //父类中的公共权限成员 到子类中依然是公共权限  可访问 public权限m_B;          //父类中的包含权限成员 到子类中依然是保护权限  可访问 protected权限//m_C;        //父类中的私有权限成员 子类访问不到            不可访问}
};void test01()
{Son1 s1;s1.m_A = 100;  //其他类只能访问到公共权限// s1.m_B = 100;  //到Son1中 m_B是保护权限 类外访问不到
}//保护继承
class Base2
{
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son2 :protected Base2
{
public:void func(){m_A = 100; //父类中公共成员,到子类中变为保护权限m_B = 100; //父类中保护成员,到子类中变为保护权限//m_C = 100; //父类中私有成员, 子类访问不到}};void test02()
{Son2 s1;// s1.m_A = 1000;//在Son2中 m_A变为保护权限 ,因此类外访问不到// s1.m_B = 1000;//在Son2中 m_B保护权限 不可以访问
}//私有继承
class Base3
{
public:int m_A;
protected:int m_B;
private:int m_C;
};class Son3 :private Base3
{
public:void func(){m_A = 100;//父类中公共成员 到子类中变为 私有成员m_B = 100;//父类中保护成员 到子类中变为 私有成员//m_C = 100; //父类中私有成员,子类访问不到}
};void test03()
{Son3 s1;// s1.m_A = 1000; //到Son3中 变为 私有成员 类外访问不到// s1.m_B = 1000; //到Son3中 变为 私有成员 类外访问不到
}class GrandSon3 :public Son3
{
public:void func(){// m_A = 1000;//到了Son3中 m_A变为私有,及时是儿子,也是访问不到// m_B = 1000;//到了Son3中 m_B变为私有,及时是儿子,也是访问不到}
};

继承中的对象模型

问题:从父类继承过来的成员,哪些属于子类对象中?

class Base
{
public:int m_A;
protected:int m_B;
private:int m_C;      //私有成员只是被隐藏了,但是还是会继承下去
};//公共继承
class Son :public Base
{
public:int m_D;
};void test01()
{//父类中所有非静态成员属性都会被子类继承下去//父类中私有成员属性 是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了cout << "size of Son = " << sizeof(Son) << endl;
}int main() 
{test01();system("pause");return 0;
}

相关文章:

C++:继承

继承&#xff1a; 继承的基本语法&#xff1a; 继承是面向对象三大特性之一&#xff1a; 我们发现&#xff0c;定义这些类&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码。 继承的…...

苍穹外卖--客户催单

需求分析 用户在小程序中点击催单按钮后&#xff0c;需要第一时间通知外卖商家 设计思路&#xff1a;* 通过WebSocket实现管理端页面和服务端保持长连接状态当用户点击催单按钮后&#xff0c;调用WebSocket的相关API实现服务端向客户端推送消息客户端浏览器解析服务端推送的…...

春秋云境:CVE-2022-32991(sql注入)

靶标介绍&#xff1a; 该CMS的welcome.php中存在SQL注入攻击。 获取登录地址 http://eci-2zeb0096que0556y47vq.cloudeci1.ichunqiu.com:80 登录注册 注册成功登录进入注册接口 参数接口一 发现接口参数q http://eci-2zeb0096que0556y47vq.cloudeci1.ichunqiu.com/welcome.p…...

css实现鼠标移入背景图片变灰并浮现文字的效果

首先上效果图 说明一下我的html结构 如上图是一个div包裹的img标签, div的块大小width, height 自己定义, 我说明一下核心样式代码 下面写法是scss, 请自行替换 .web-query-image {position: relative; // 相对定位, 方便浮现文案进行绝对定位border-radius: 8px;box-sizing: …...

ES-深入理解倒排索引

倒排索引 idproductdesc1新版 小米 至尊-纪念版手机1小米 NFC 手机3NFC手机4小米 耳机5华为 耳机6扫地机器人7华为 Mata………………term_indexterm dictionaryposting list------------------------------------小米1……100W华为6,7,9NFC76,90耳机5352红米643,98机器人645,9…...

linux NAT网卡配置static

由于是内网&#xff0c;资料无法拷贝&#xff0c;借助参考资料&#xff0c;整理发出。 镜像安装 基本操作。 查看VM配置 图1&#xff0c;有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255&#xff0c;对应下面配置的N…...

信奥编程 1168:大整数加法

解析&#xff1a;在c中需要考虑这么几个问题&#xff0c;第一个是大数据的输入&#xff0c;第二个是大数据的存储&#xff0c;第三是大数据的计算方式&#xff0c;最后是输出。 针对上述几个问题&#xff0c;第一个问题&#xff0c;采用字符串的方式或者数组加循环的方式接收输…...

k8s上Pod全自动调度、定向调度、亲和性调度、污点和容忍调度详解

目录 一.Pod调度简介 二.Deployment/RC全自动调度 1.简介 2.案例演示 &#xff08;1&#xff09;Deployment &#xff08;2&#xff09;RC 三.nodeSelector/nodeName指定节点调度 1.原理简介 &#xff08;1&#xff09;nodeSelector原理 &#xff08;2&#xff09;no…...

C# 动态编译代码并执行

写在前面 本文采用动态编译的方式&#xff0c;对目标文件code.txt中的C#代码进行实时编译并调用&#xff1b;当然也可以直接在代码中直接装配或读取已有的代码文本&#xff0c;动态编译可以用于很多需要热更新的场景&#xff0c;实现无需重启程序也能达到更新代码的需求。 代…...

nginx配置反向代理及负载均衡

目录 1.前端发送的请求&#xff0c;是如何请求到后端服务的1.nginx 反向代理的好处&#xff1a;2.nginx 反向代理的配置方式&#xff1a;3. nginx 负载均衡的配置方式 1.前端发送的请求&#xff0c;是如何请求到后端服务的 1.nginx 反向代理的好处&#xff1a; 提高访问速度 因…...

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建订阅者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建订阅者代码&#xff08;Python&…...

Java全栈基础篇--集合

集合 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 特点&#xff1a; 长度不固定&#xff0c;还可以存储不同的数据&#xff08;但是一般都用同一类型&#xff09; 集合和数组既然都是容器&#xff0c;它们有啥区别呢&#xff1f; 数组的长…...

Facebook公共主页受限、被封?一文教你排雷解决

一、Facebook公共主页是什么&#xff1f; 现在人们的生活已经离不开各种社交媒体&#xff0c;只要有智能手机&#xff0c;或多或少会使用一些社交平台&#xff0c;而Facebook是一个拥有大量用户的社交平台。这对于各种企业而言&#xff0c;也是一个十分优秀的营销平台&#xf…...

Day04:每日一题:2661. 找出叠涂元素

2661. 找出叠涂元素 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。 arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i &#xff0c;并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 arr 中在 mat…...

SpringBoot 整合Redis

在Spring Boot中&#xff0c;你可以使用以下注解来实现Redis的整合: EnableCaching: 在启动类上添加该注解&#xff0c;开启Spring的缓存支持。 Cacheable: 标记方法的返回值可被缓存。当缓存中存在相同 key 的数据时&#xff0c;直接从缓存中获取数据&#xff0c;否则执行方法…...

tensorflow-gpu1.15 + win11 + RTX 4050环境配置

组了一套&#xff0c;不知道行不行 windows11GPURTX 4050python3.7.12tensorflow-gpu1.15.0cudatoolkit10.0.130cudnn7.6.5Keras2.3.1...

jmeter资料

1.jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本、Java 对象…...

代码随想录算法训练营第三十六天| 435 无重叠区间 763 划分字母区间 56 合并区间

目录 435 无重叠区间 763 划分字母区间 56 合并区间 435 无重叠区间 将intervals数组按照左端点进行升序排序。 设置变量len标志此时新加入端点后所有区间的位置&#xff0c;将其赋初值为第一对区间的右端点&#xff0c;因为该点是一定可达的。设置变量res来存储需要移除空间…...

2023-12-01 事业-代号s-引流技巧和营销思路

摘要: 2023-12-01 事业-代号s-引流技巧和营销思路 引流技巧和营销思路 独立站流量渠道主要有以下几种:1、CPC付费广告:搜索引擎、社交平台、广告联盟平台。2、网红营销:youtube、INS、博客论文、TT直播。适合比较时尚品类3、Affiliate促销网站:优惠券折扣网站发布产品优惠…...

反转链表的Java实现

1. 题目 反转链表&#xff0c;例如&#xff0c;原链表1-2-3-4-5&#xff0c;反转后为5-4-3-2-1。 2. 迭代法实现 private ListNode reverseList(ListNode head) {if(head null || head.next null){return head;}ListNode cur head.next;head.next null;while(cur ! null…...

攻克Switch 19.0.1系统Atmosphere启动故障:从诊断到优化的完整方案

攻克Switch 19.0.1系统Atmosphere启动故障&#xff1a;从诊断到优化的完整方案 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 在Switch主机…...

数据库课程设计融合AI:使用PyTorch构建智能图书馆推荐系统

数据库课程设计融合AI&#xff1a;使用PyTorch构建智能图书馆推荐系统 1. 项目背景与价值 高校图书馆管理系统是数据库课程的经典设计选题&#xff0c;但传统方案往往只关注基本的增删改查功能。将AI推荐系统融入课程设计&#xff0c;不仅能让学生掌握数据库设计核心技能&…...

告别盲目复位!用KEIL5的.axf文件实现“热插拔”调试,保留MCU内存状态全记录

深入解析KEIL5调试黑科技&#xff1a;如何通过.axf文件实现MCU内存状态无损调试 调试嵌入式系统时&#xff0c;最令人沮丧的莫过于遇到偶发故障却无法复现现场。传统调试方式往往需要复位MCU&#xff0c;导致宝贵的运行时状态信息瞬间消失。这种"盲人摸象"式的调试体…...

human-pose-estimation.pytorch:简单而强大的人体姿态估计终极指南

human-pose-estimation.pytorch&#xff1a;简单而强大的人体姿态估计终极指南 【免费下载链接】human-pose-estimation.pytorch The project is an official implement of our ECCV2018 paper "Simple Baselines for Human Pose Estimation and Tracking(https://arxiv.o…...

2026年了,为什么很多企业做了智慧气象,结果还是没把风险降下来?

上个月&#xff0c;和一位新能源集团的运营负责人聊天&#xff0c;他抛出一个百思不得其解的问题&#xff1a;“我们花了300多万上了智慧气象系统&#xff0c;接了精细化预报&#xff0c;预警信息每天推送到手机、电脑、大屏&#xff0c;三个渠道同步。结果上个月一场雷暴&…...

ALM代码编辑器实战教程:从HTML到TSX的转换技巧

ALM代码编辑器实战教程&#xff1a;从HTML到TSX的转换技巧 【免费下载链接】alm :rose: A :cloud: ready IDE just for TypeScript :heart: 项目地址: https://gitcode.com/gh_mirrors/al/alm ALM代码编辑器是一款专为TypeScript开发打造的云端IDE&#xff0c;提供了丰富…...

UE5.0.3打包Linux报错?手把手教你搞定BlueprintJson插件缺失问题

UE5.0.3 Linux打包报错终极指南&#xff1a;BlueprintJson插件问题的深度解析与实战修复 当你满怀期待地在UE5.0.3中点击"打包Linux"按钮&#xff0c;却看到屏幕上弹出关于BlueprintJson插件的红色错误信息时&#xff0c;那种挫败感我深有体会。作为一名经历过无数次…...

Java EE开发技术 (报错解决 BeanCreationException)

该报错因为使用构造注入时没有提供参数列表或没有提供有参构造而造成的修改静态工厂中的参数列表即可...

Phi-4-mini-reasoning真实案例:教育SaaS平台月均百万次推理调用的稳定性保障

Phi-4-mini-reasoning真实案例&#xff1a;教育SaaS平台月均百万次推理调用的稳定性保障 1. 项目背景与挑战 在教育科技行业&#xff0c;数学和逻辑推理类题目的自动解答一直是技术难点。某头部教育SaaS平台在2023年接入了Phi-4-mini-reasoning模型&#xff0c;用于其在线作业…...

Voron 2.4 3D打印机进阶调试与故障排除指南

Voron 2.4 3D打印机进阶调试与故障排除指南 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 机械系统精调&#xff1a;从结构应力到运动精度 问题导向&#xff1a;框架组装后出现对角线偏差超过2mm&a…...