当前位置: 首页 > 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
继承时会导致方法和属性的权限被改变
理解继承的体系设计原理
理解派生类会怎么样调用基类的构造、析构函数

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

http://www.lryc.cn/news/396893.html

相关文章:

  • skywalking-2-客户端-php的安装与使用
  • 图文讲解IDEA如何导入JDBC驱动包
  • java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int
  • scrapy写爬虫
  • Mybatis study
  • 【论文速读】《面向深度学习的联合消息传递与自编码器》
  • 防御---001
  • DNS 杂谈
  • docker笔记2
  • 数字统计
  • Git 使用问题
  • JMH325【剑侠情缘3】第2版80级橙武网游单机更稳定亲测视频安装教学更新整合收集各类修改教学补丁兴趣可以慢慢探索
  • 大数据专业创新人才培养体系的探索与实践
  • MySQL 中的 DDL、DML、DQL 和 DCL
  • 基础架构服务API:降低成本,提升业务效益
  • Redis IO多路复用
  • 如何在Vue中实现拖拽功能?
  • 在Linux下使用Docker部署chirpstack
  • 《昇思25天学习打卡营第14天|计算机视觉-ShuffleNet图像分类》
  • 将字符串写入结构体变量中
  • iPhone 16 Pro系列将标配潜望镜头:已开始生产,支持5倍变焦
  • PG在还没有pg_class的时候怎么访问基础系统表?
  • UnityHub 无法添加模块问题
  • python04——类(基础new)
  • 【Python百日进阶-Web开发-Peewee】Day296 - 查询示例(五)聚合2、递归
  • 闲话银行家舍入法,以及在程序中如何实现
  • 最短路径算法(算法篇)
  • 昇思25天学习打卡营第11天 | LLM原理和实践:基于MindSpore实现BERT对话情绪识别
  • 反向散射技术(backscatter communication)
  • 致远CopyFile文件复制漏洞