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

C++_继承

介绍

  • 继承的基本概念
    1.共性和个性 (PS:有相同的属性 但是 又有自己的特点)
  • 基类和子类
    1. 基类(父类) = 共性
    2. 子类(派生类) = 个性(特点)
  • 继承语法
    1.class 子类名:继承方式1 基类1,继承方式2 基类2{ 行为 };
  • 继承方式(PS:默认继承方式为:私有继承)
    1.公有继承: public
    2.保护继承: protected(PS:在子类中可以看到,子类可以访问)
    3.私有继承: private(PS:在子类中可以看到,但是无法访问)
  • 继承的使用场景
    1.创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承。不但减少代码量,而且新类会拥有基类所有功能
    2.需要创建多个类,它们拥有很多相似的成员变量或成员函数时,可以使用继承。将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以代码复用,也方便后期维护
  • 继承注意事项
    1.在子类中定义基类同名的 公有成员和保护成员,子类中的成员会 隐藏 基类中的 同名成员,想访问被隐藏的成员,通过作用域限定符(::)+成员名 可以访问 被隐藏的基类成员
    2.在基类中构造函数设置为私有成员的化,子类无法进行继承
    3.子类初始化 基类成员变量 或者 函数需要显示构造

2.1基类成员初始化方法一:Student(string name, int age = 0, string gender = "男"):Person(name, age, gender){}//三参构造(PS:需要 基类有三参构造函数)
2.2基类成员初始化方法二:Student(string name, int age = 0, string gender = "男"){m_name = name;m_gender = gender;oage(age);}//无参构造(PS:需要 基类有默认无参构造函数)

公有继承特点

1.子类可以 直接访问 基类所有的 公有和保护成员,其效果如同它们是在子类中声明一样
2.对于基类的 私有成员,在子类中存在 但无法访问
3.子类对象 任何时候都可以被当成 基类对象

保护继承特点

1.使基类 公有成员 和 保护成员 进行保护化,只禁止外部通过该子类访问
2.子类指针 或 引用 不能隐式转换成基类类型 指针或引用

私有继承特点

1.将基类公有和保护成员私有化,禁止外部通过该子类访问,也禁止该子类的子类进行访问
2.子类指针 或 引用 不能隐式转换成基类类型 指针或引用

继承方式与访问控制

在这里插入图片描述

公有继承 保护继承 私有继承区别源码

#include<iostream>
#include<string>
using namespace std;
//基类A
class A
{public:int m_pub;//公有成员变量
protected:int m_pro;//保护成员变量
private:int m_pri;//私有成员变量
};
//子类B
class B:protected A//保护继承基类,在全局中是无法通过 子类去访问基类(包括子类的子类也无法访问)
{
public:void foo(){cout << m_pub << " " << m_pro << endl;}
};
//子类C
class C :private B//私有继承,无法访问任何成员
{
public://B::foo();//无法访问B类中成员函数
};
void main()
{A a;a.m_pub = 10;B b;//b.m_pub;//可以看见,但是无法访问system("pause");
}

子类内存布局

子类对象内存布局图:
在这里插入图片描述

源码

#include<iostream>
#include<string>
using namespace std;class A
{
public:A(){ cout << "A构造" << endl; }~A(){ cout << "A析构" << endl; }
};
class Person:public A//人
{
public://默认构造函数Person(){ cout << "Person构造" << endl; }//构造函数Person(string name, int age, string gender) :m_name(name), m_age(age), m_gender(gender){}//析构函数~Person(){ cout << "Person析构" << endl; }
public:void eat(){ cout << "吃饭" << endl; }void sleep(){ cout << "睡觉" << endl; }//打印函数void print(){cout << m_name << " " << m_age << " " << m_gender << endl;}//获取年龄int oage(int age){return m_age = age;}
protected:string m_name;//名字string m_gender;//性别
private:int m_age;//年龄
};
//子类 学生
class Student:public Person//人
{
public://构造函数Student(string name, int age = 0, string gender = "男")/*:Person(name, age, gender)//三参构造*/{cout << "Student构造" << endl;//基类成员初始化方法二m_name = name;m_gender = gender;oage(age);}//打印void study(){eat();cout << "学习" << endl;m_name = "一航";}~Student(){cout << "Student析构" << endl;}
};
void main()
{
//构造 and 析构流程测试{//构造子类对象Student stu("一航");cout << "--------------分隔符--------------" << endl;//函数调用stu.study();cout <<"--------------分隔符--------------"<< endl;//拷贝子类对象操作Person*Ph1 = &stu;Person&Ph2 = stu;//打印结果Ph1->print();Ph2.print();cout << "--------------分隔符--------------" << endl;}system("pause");
}

运行结果

A构造
Person构造
Student构造
--------------分隔符--------------
吃饭
学习
--------------分隔符--------------
一航 0 男
一航 0--------------分隔符--------------
Student析构
Person析构
A析构
请按任意键继续. . .

相关文章:

C++_继承

介绍 继承的基本概念 1.共性和个性 (PS:有相同的属性 但是 又有自己的特点) 基类和子类 1. 基类(父类) 共性 2. 子类(派生类) 个性(特点) 继承语法 1.class 子类名:继承方式1 基类1,继承方式2 基类2{ 行为 };继承方式(PS:默认继承方式为:私有继承) 1.公有继承: public 2.保护…...

Java-IO流-15

文件操作 文件创建 package com.edu.file;import org.junit.jupiter.api.Test;import java.io.File; import java.io.IOException;public class Demo01 {public static void main(String[] args) {}Test//方式1public void create01(){String filePath "D:\\new1.txt&q…...

java中使用redis

1、redis数据类型 1.1、5种数据类型 redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a;字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。 字符串(string)&#xff1a;普通字符…...

Mongodb的可重试读操作

目录 重试读操作 需要条件 启用重读 支持可重试读的操作 不支持可重试读的操作 行为 重试读操作 连接mongodb进行读操作时&#xff0c;遇到网络或数据库集群的主节点切换导致的数据读问题。mongodb驱动自动尝试重新执行读操作。 需要条件 数据库连接驱动支持mongodb4.2…...

2024年1月2日-1月7日(ue5底层渲染+ue arpg+项目需求)

按照月计划&#xff0c;按照每小时分四段进行&#xff0c;arpg一例ue5底层渲染0.1小时arpg一例项目需求的相关视频教程一段 周二&#xff1a; 18&#xff1a;30- 19:30&#xff08;1小时&#xff09;ue arpg (88-89) ue5底层渲染03A14&#xff08;6&#xff1a;08&#xff09;…...

MySQL中的视图和触发器

SQL 视图 1 ) 概述 在mysql中&#xff0c;视图是一个非真实存在的虚拟表其本质是&#xff0c;根据sql语句获取动态的数据集&#xff0c;并为其命名用户使用时只需使用名称&#xff0c;即可获取结果集&#xff0c;并可以将其当做表来使用 2 &#xff09;用法示例 2.1 比较麻烦…...

uView-UI v2.x常见问题整理

为了更好的给大家提供 uView UI 的技术支持&#xff0c;uView UI 团队整理常见问题文档&#xff0c;大家可以阅读查找常见的问题解决办法。 uView 2.x 文档 https://www.uviewui.com uView 1.x 文档 https://v1.uviewui.com uView UI uni-app 主页 DCloud 插件市场 uVie…...

MBTI职业性格测试 28题(免费版)

MBTI职业性格测试概述 MBTI是现在国际上最为流行的测试工具&#xff0c;利用MBTI职业性格测试&#xff0c;可以清楚地找到自己的性格特点以及兴趣爱好&#xff0c;方便于对职业进行规划、以及改善人际关系。其主要应用心理学常识对个性做出判断&#xff0c;提炼出动力、信息收…...

Springcloud 微服务实战笔记 Ribbon

使用 Configurationpublic class CustomConfiguration {BeanLoadBalanced // 开启负载均衡能力public RestTemplate restTemplate() {return new RestTemplate();}}可看到使用Ribbon&#xff0c;非常简单&#xff0c;只需将LoadBalanced注解加在RestTemplate的Bean上&#xff0…...

CSS基础笔记-04cascade-specificity-inheritance

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》CSS基础笔记-03选择器 前言 Cascading Style Sheets&#xff0c;关键就在于这个cascading&#xff0c;对于这个术语理解&#xff0c;感觉对于我这种CSS新手有点儿不太friendly。本文记录下我对这个术语的理…...

Spring应用的部署与管理

一、前言 部署是将开发好的应用发布到服务器上&#xff0c;使其能够被用户访问的关键步骤。Spring框架提供了灵活的部署选项&#xff0c;本文将介绍Spring应用的常见部署方式和一些建议&#xff0c;帮助开发者顺利将应用投放到生产环境。 二、传统部署方式&#xff1a;WAR包 传…...

B端产品经理学习-需求挖掘

B端产品需求挖掘 目录 识别和管理干系人 决策人和负责人需求挖掘 针对用户进行需求挖掘 用户访谈结果整理 B端产品的需求来源是非常复杂的&#xff0c;要考虑多个方面&#xff1b;如果你是一个通用性的产品&#xff0c;要考虑市场、自身优劣势、干系人。而定制型B端产品会…...

整数规划基本原理

1.1 定义 规划中的变量&#xff08;部分或全部&#xff09;限制为整数时&#xff0c;称为整数规划。若在线性规划模型中&#xff0c;变量限制为整数&#xff0c;则称为整数线性规划。目前所流行的求解整数规划的方法&#xff0c;往往只适用于整数线性规划。目前还没有一种方法…...

秋招复习之堆

目录 前言 堆 堆的常用操作 堆的实现&#xff08;大根堆&#xff09; 1. 堆的存储与表示 2. 访问堆顶元素 3. 元素入堆 4. 堆顶元素出堆 Top-k 问题 方法一&#xff1a;遍历选择 方法二&#xff1a;排序 方法三&#xff1a;堆 总结 前言 秋招复习之堆。 堆 「堆 heap…...

算法训练营Day36(贪心-重叠区间)

都算是 重叠区间 问题&#xff0c;大家可以好好感受一下。 都属于那种看起来好复杂&#xff0c;但一看贪心解法&#xff0c;惊呼&#xff1a;这么巧妙&#xff01; 还是属于那种&#xff0c;做过了也就会了&#xff0c;没做过就很难想出来。 不过大家把如下三题做了之后&#…...

如何利用Oracle官方网站不登录账号下载和安装非最新版本的JDK(版本自由选择)

一、JDK概述 JDK&#xff08;Java Development Kit&#xff09;是Java开发工具集&#xff0c;是针对Java编程语言的软件开发环境。它包含了Java编译器、JRE&#xff08;Java运行时环境&#xff09;以及其他一些用于开发、调试和测试Java应用程序的工具&#xff0c;是Java开发人…...

税法相关的基础知识

文章目录 税法原则1.税法基本原则2.税法适用原则 来和大家聊聊税法相关的基础知识 税法原则 1.税法基本原则 2.税法适用原则...

ListNode 2487. 从链表中移除节点,单调栈的应用

一、题目 1、题目描述 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 2、接口描述 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nu…...

vue3中pdf打印问题处理

1 get请求参数问题 之前的请求是post得不到参数&#xff0c;今天发现的问题很奇怪&#xff0c;从前端进入网关&#xff0c;网关居然得不到参数。 前端代码 const print () > {let linkUrlStr proxy.$tool.getUrlStr(proxy.$api.invOrder.psiInvOrder.printSalOutstock,{a…...

如何向嵌入式设备中添加tcpdump工具

说明&#xff1a;tcpdump是一个在网络设备调试中一个非常重要的工具&#xff0c;它并不像hexdump等工具集成在busybox里面&#xff0c;也不像其他的软件一样只需要依赖linux标准的库就可以实现&#xff0c;它需要pcap相关的库和加密的相关库。 本文主要是基于realtek 83系列的…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

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

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

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...