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

继承相关知识

概念

定义类时,代码中有共性的成员,还有自己的属性,使用继承可以减少重复的代码,

继承的语法

class 子类:继承方式 父类

继承方式有:public,private,protected

公共继承:父类的公有成员到子类也是公有的,父类的保护成员在子类是受保护的

保护继承:父类中共有的权限内容和保护权限内容,在子类都变为保护权限

私有继承:父类中公有和保护权限内容,在子类都变为私有权限

其中,父类的私有成员,子类不管哪种继承方式都无法访问。

继承中的对象模型

父类中所有的非静态成员属性,子类都会继承,私有成员也会继承,只是私有成员被编译器隐藏了。

继承中构造和析构顺序

#include <iostream>
using namespace std;
class Base
{
public:Base(){cout << "父类构造函数" << endl;}~Base(){cout << "父类析构函数" << endl;}
};
class son :public Base
{
public:son(){cout << "子类构造函数" << endl;}~son(){cout << "子类析构函数" << endl;}
};
int main()
{son s;
}

继承中的构造顺序是,先构造父类,再构造子类,析构则相反,因为创建子类对象的时候,会先创建父类对象,然后继承。

继承同名成员的处理方式

当子类和父类出现同名的成员时,如果需要访问子类,可以直接访问,如果需要访问父类,需要加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}~son(){}
};
int main()
{son s;cout << s.m_a << endl;//20cout << s.Base::m_a << endl;//10
}

继承中同名成员函数的处理方式

思想和同名成员函数处理方式相同,但需要注意的是,子类的同名函数会隐藏父类中所有的同名函数,解决方法就是加作用域。

#include <iostream>
using namespace std;
class Base
{
public:int m_a;Base(){m_a = 10;}void func(){cout << "父类函数的调用" << endl;}~Base(){}
};
class son :public Base
{
public:int m_a;son(){m_a = 20;}void func(){cout << "子类函数的调用" << endl;}~son(){}
};
int main()
{son s;s.func();//直接调用是子类的函数s.Base::func();//加作用域后就是调用父类的函数
}

继承中同名静态成员的处理方式

静态成员变量的特点是:所有对象共享同一份数据,编译阶段就分配内存,类内声明,类外初始化。

静态成员定义的语法:

static int a;

静态成员函数的特点是:只能访问静态成员变量,不能访问非静态成员变量,也是只有一份,所有对象共享一份函数实例。

静态成员和非静态成员出现同名时,处理方式一致,访问子类直接访问,访问父类需要加上作用域,因为静态成员不属于对象上,因此也可以通过类名直接访问,静态成员属性。

静态成员函数处理方式一致,也可以通过类名方式访问,子类也会隐藏父类同名函数,需要访问被隐藏的父类同名函数,需要加上作用域。

静态成员和非静态成员处理方式是一样的,只是静态成员可以通过对象和类名访问。

多继承

语法:

class 子类:继承方式 父类1,继承方式 父类2......

子类中如果有多个同名成员,需要加作用域区分。(实际开发中很少使用)

http://www.xdnf.cn/news/90793.html

相关文章:

  • Kinibi-610a:面向芯片厂商与设备制造商的TEE升级详解
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.25)
  • ctfshow web类 2-7题
  • pip的源管理和包管理
  • 初级云计算运维工程师学习二
  • DAS(分布式声波传感)工作流程
  • Windows:删除文件报(已解决)操作无法完成,因为其中的文件夹或文件已在另一程序中打开
  • 关于QLabel上显示图片扩展的问题记录
  • 文件操作函数
  • PLOG安装
  • NumPy入门:从数组基础到数学运算
  • 深度学习中的“重参数化”总结
  • 正点原子TFTLCD扩展
  • 框架开发.idea配置项提示
  • 【算法】BFS-解决FloodFill问题
  • 基于 Spring Boot实现的图书管理系统
  • 强化学习框架:OpenRLHF源码解读,模型处理
  • C++ 算法(12):数组参数传递详解,值传递、指针传递与引用传递
  • pcp补丁升级手顺
  • YOLO系列面试冲刺
  • 深入理解无监督学习:探索数据的潜在结构
  • 基于TCP的协议
  • (数论)Lucas定理
  • linux 手动触发崩溃
  • 多头注意力(Multi‑Head Attention)
  • 鸣潮赞妮技能机制解析 鸣潮赞妮配队推荐
  • 路由交换网络专题 | 第六章 | OSPF | BGP | BGP属性 | 防环机制
  • RS232借助 Profinet网关与调制解调器碰撞出的火花
  • 探秘云原生架构:概念、技术、设计与反模式深度解读
  • strlen参数不匹配编译报错处理