C++中的继承、以及赋值兼容转换。

news/2024/10/17 22:24:43/

一、继承的概念及定义

继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。

举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可以封装一个人的属性和方法,然后我用老师、学生的类去继承人这个类,他们的类里面都有了共同的属性和共用的方法,不用再去每个类里面分别写了。

继承是类设计层次的复用,之前接触到的复用都是函数复用。

代码解释如下:

我写了一个 Person 的类,然后老师、学生再去继承这个 Person 类,就不用在老师和学生的里面再写相同的属性和方法。

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
using namespace std;class Person
{
public:void Print(){cout << "name:" << _name << endl;cout << "age:" << _age << endl;}string _name = "person";int _age = 18;
};class student : public Person
{
public:int _student_id;
};class teacher : public Person
{
public:int _job_number;
};int main()
{student s;teacher t;s._name = "赵三";s._age = 19;s._student_id = 01;s.Print();t._name = "张老师";t._age = 25;t._job_number = 0001;t.Print();return 0;
}

 

上面写的 teacher 和 student 继承了 Person 类,都是用类里面的权限访问限定符中的 public,那么为什么要用 public 继承?

访问限定符的访问方式变化:

类成员/继承方式

public继承

protected继承

private继承

基类的public成员

派生类的public成员

派生类的protected成员

派生类的private成员

基类的protected成员

派生类的protected成员

派生类的protected成员

派生类的private成员

基类的private成员

在派生类中不可见

在派生类中不可见

在派生类中不可见

 总结:

class 中默认继承方式是 private;struct 中默认继承方式是 public(和类中的默认权限一样)

父类成员在子类的访问方式 = min(成员在基类的访问限定符,继承方式)

public > protected > private 

二、基类和派生类对象赋值兼容转换。

1. 子类的对象 可以给 父类的对象/指针/引用。(切片)

2. 基类对象不能赋值给子类对象。

3. 基类的指针/引用可以赋值给子类的指针/引用(需要C++11中强转类型)

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>
using namespace std;class Person
{
public:void Print(){cout << "name:" << _name << endl;cout << "age:" << _age << endl;}string _name = "person";int _age = 18;
};class student : public Person
{
public:int _student_id;
};class teacher : public Person
{
public:int _job_number;
};void func(Person& p)
{p.Print();
}int main()
{student s;teacher t;func(s);func(t);return 0;
}

画图解释一下切片,如下:


http://www.ppmy.cn/news/86617.html

相关文章

虚拟化与云计算有什么区别?

两者核心理念都是从硬件中分离资源&#xff0c;从而创建可用的环境&#xff0c;所以很容易被混为一谈。 虚拟化有助于创建云计算&#xff0c;但它并非实现云计算的决定性技术&#xff0c;也可能只是其中的一种。你可以这样理解&#xff1a; 虚拟化是一种将功能与硬件分离的技…

堆和堆排序

目录 堆的概念 堆的实现 堆的存储结构 堆的插入操作 堆的删除操作 堆的创建 向上调整建堆和向下调整建堆 堆排序 堆的应用 - topK问题 堆的概念 “堆”是计算机科学中一种数据结构&#xff0c;可以看作是一棵完全二叉树。通常满足堆的性质&#xff1a;父节点的值总是…

【firewalld防火墙】

目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…

Win11硬盘分区

电脑重装了Win11系统&#xff0c;按WinE打开主文件夹&#xff0c;再点击此电脑&#xff0c;发现&#xff1a; 磁盘只有一个C盘。硬盘的所有空间都在该盘上了&#xff0c;那么我们怎么将其分区呢&#xff1f; Win11硬盘分区步骤&#xff1a; 步骤1&#xff1a; 按WinR输入dis…

2023国赛tomcat题

环境: 10.10.120.128 安装 tomcaA 10.10.120.129 安装tomcatB 10.10.120.130 安装 nginx 配置dns: 正向解析 反向解析 Tomcat ssl配置 [root@localhost ~]# tar -zxvf jdk-11.0.8_linux-x64_bin.tar.gz [root@localhost ~]# mv jdk-11.0.8 /usr/local/ Vim /etc/profile …

Carla自动驾驶仿真五:opencv绘制运动车辆的boudingbox(代码详解)

文章目录 一、安装opencv二、opencv绘制车辆的boudingbox1、构造相机投影矩阵函数2、定义将Carla世界坐标转换成相机坐标的函数3、设置Carla并生成主车和相机4、使用队列接收相机的数据5、计算相机投影矩阵6、定义顶点创建边的列表7、通过opencv显示相机的画面8、通过opencv绘制…

27 KVM管理系统资源-管理虚拟CPU份额

文章目录 27 KVM管理系统资源-管理虚拟CPU份额27.1 概述27.2 操作步骤 27 KVM管理系统资源-管理虚拟CPU份额 27.1 概述 虚拟化环境下&#xff0c;同一主机上的多个虚拟机竞争使用物理CPU。为了防止某些虚拟机占用过多的物理CPU资源&#xff0c;影响相同主机上其他虚拟机的性能…

C4D渲染学习笔记(0):前置知识

前言 我现在学C4D是第三次学C4D了&#xff0c;我第一次学的时候是大二&#xff0c;第二次学的时候是工作的时候。真的是学多少&#xff0c;忘多少。这次又开始学习做笔记了。 相关名词介绍 名词含义几何建模/数字建模几何建模就是用几何题来建模&#xff0c;通过修改控件的参…