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

c++:面向对象的继承特性

什么是继承

(1)继承是C++源生支持的一种语法特性,是C++面向对象的一种表现
(2)继承特性可以让派生类“瞬间”拥有基类的所有(当然还得考虑权限)属性和方法
(3)继承特性本质上是为了代码复用
(4)类在C++编译器的内部可以理解为结构体,派生类是由基类成员叠加派生类新成员得到的
派生类又叫子类,基类又叫父类。两种叫法都有人常用,我们后面会混用,锻炼大家瞬间了然的能力

继承中的权限管控

C++类中的访问权限管控回顾
(1)public 类内部可以访问,类的外部可以访问
(2)private 类内部可以访问,类的外部不能访问
(3)protected 类内部可以访问,类的外部不能访问

1、父类的private成员,在三种继承下都会被变成在子类中是比private还可怜的这种成员
2、父类的public成员,在public继承下到子类中还是public,在protected继承下到子类中是protected的,在private继承下到子类中是private的。
3、父类的protected成员,在public继承下到子类中是protected的,在protected继承下到子类中是protected的,在private继承下到子类中是private的。
4、private:如果是父类中的private权限成员,那么在继承时会被降到比private还惨的这种;而如果是private继承,则不会导致父类中public和protected的成员降权到比private还惨的这种,只会降级到private权限。
5、在继承中父类中所有的成员(不管哪种权限)都会被继承给子类,而不会丢失任何一个。

派生类和基类的构造析构关系

派生类并不继承基类的构造和析构函数,只继承成员变量和普通成员方法

派生类的构造函数一定会调用基类的构造函数,析构也一样

#include <iostream>// 基类
class Animal {
public:// 带参数的基类构造函数Animal(const std::string& name) : name_(name) {std::cout << "Animal constructor called for " << name_ << std::endl;}// 基类析构函数virtual ~Animal() {std::cout << "Animal destructor called for " << name_ << std::endl;}private:std::string name_;
};// 派生类
class Pigeon : public Animal {
public:// 带参数的派生类构造函数Pigeon(const std::string& name, int age) : Animal(name), age_(age) {std::cout << "Pigeon constructor called for " << name << " aged " << age_ << std::endl;}// 派生类析构函数~Pigeon() {std::cout << "Pigeon destructor called for age " << age_ << std::endl;}private:int age_;
};int main() {Pigeon p("Polly", 3);return 0;
}

在这里插入图片描述
为什么派生类的构造(析构)必须调用基类的某个构造(析构)
(1)牢记构造函数的2大作用:初始化成员,分配动态内存
(2)派生类和基类各自有各自的构造函数和析构函数,所以是各自管理各自的成员初始化,各自分配和释放各自所需的动态内存
(3)继承的语言特性,允许派生类调用基类的构造和析构函数,以管理派生类从基类继承而来的那些成员。
(4)明确:派生类的构造和析构处理的永远是派生类自己的对象,只是派生类对象模板中有一部分是从基类继承而来的而已。

总结:

理解继承是什么
继承时是全部继承方法和属性
方法和属性的权限分三类private、public、protected
继承时会导致方法和属性的权限被改变
理解继承的体系设计原理
理解派生类会怎么样调用基类的构造、析构函数

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 防止应用调试分析IP被扫描加固实战教程
  • 随身WiFi市场乱象横生,随身WiFi测评最好的格行随身WiFi如何引领变革?
  • 【Oracle】Oracle数据库中的数据类型
  • LabVIEW自动测控与故障识别系统
  • 基于 KV Cache 实现流式 Self-Attention 序列解码
  • 镍氢电池性能不减,你敢信?
  • 前端发布项目后,解决缓存的老版本文件问题
  • MFC常见问题解决
  • 3个方法教你如果快速绕过Excel工作表保护密码
  • 【ARM 常见汇编指令学习 7.1 -- LDRH 半字读取指令】
  • 时间处理的未来:Java 8全新日期与时间API完全解析
  • 串口工具推荐
  • stm32按键设置闹钟数进退位不正常?如何解决
  • 图文讲解IDEA如何导入JDBC驱动包
  • 【效率提升】多功能组织和整理软件一Notion
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2019年如何成为全栈工程师?
  • css选择器
  • gitlab-ci配置详解(一)
  • golang 发送GET和POST示例
  • HashMap剖析之内部结构
  • httpie使用详解
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • MYSQL 的 IF 函数
  • php ci框架整合银盛支付
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • tab.js分享及浏览器兼容性问题汇总
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue实战(四)登录/注册页的实现
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 从重复到重用
  • 简单实现一个textarea自适应高度
  • 数据科学 第 3 章 11 字符串处理
  • 仓管云——企业云erp功能有哪些?
  • 正则表达式-基础知识Review
  • # Apache SeaTunnel 究竟是什么?
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (搬运以学习)flask 上下文的实现
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (回溯) LeetCode 46. 全排列
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (七)Activiti-modeler中文支持
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)RocketMQ初步认识
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (正则)提取页面里的img标签
  • .gitignore文件---让git自动忽略指定文件
  • .net 调用海康SDK以及常见的坑解释
  • .net 托管代码与非托管代码
  • .Net 执行Linux下多行shell命令方法
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)