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

C++继承(2)

2.基类和派生类间的转换

•public继承的派⽣类对象可以赋值给基类的指针/基类的引⽤。这⾥有个形象的说法叫切⽚或者切 割。寓意把派⽣类中基类那部分切出来,基类指针或引⽤指向的是派⽣类中切出来的基类那部分。

• 基类对象不能赋值给派⽣类对象。

• 基类的指针或者引⽤可以通过强制类型转换赋值给派⽣类的指针或者引⽤。但是必须是基类的指针 是指向派⽣类对象时才是安全的。这⾥基类如果是多态类型,可以使⽤RTTI(Run-TimeType Information)的dynamic_cast来进⾏识别后进⾏安全转换。

在这里插入图片描述

class Person
{
protected:string _name; // 姓名 string _sex; // 性别 int _age; // 年龄 
};
class Student : public Person
{
public:int _No; // 学号 
};
int main()
{Student sobj;// 1.派⽣类对象可以赋值给基类的指针/引⽤ Person* pp = &sobj;Person& rp = sobj;// ⽣类对象可以赋值给基类的对象是通过调⽤后⾯会讲解的基类的拷⻉构造完成的 Person pobj = sobj;//2.基类对象不能赋值给派⽣类对象,这⾥会编译报错 sobj = pobj;return 0;}

3.继承中的作用域

3.1 隐藏规则:

1.在继承体系中基类和派⽣类都有独⽴的作⽤域。

2.派⽣类和基类中有同名成员,派⽣类成员将屏蔽基类对同名成员的直接访问,这种情况叫隐藏。 (在派⽣类成员函数中,可以使⽤基类::基类成员显⽰访问)

3.需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。

4.注意在实际中在继承体系⾥⾯最好不要定义同名的成员。

// Student的_num和Person的_num构成隐藏关系,可以看出这样代码虽然能跑,但是⾮常容易混淆 
class Person
{
protected:string _name = "⼩李⼦"; // 姓名 int _num = 111; // ⾝份证号 
};
class Student : public Person
{
public:void Print(){cout << " 姓名:" << _name << endl;cout << " ⾝份证号:" << Person::_num << endl;cout << " 学号:" << _num << endl;}
protected:int _num = 999; // 学号 
};
int main()
{Student s1;s1.Print();return 0;};

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

相关文章:

  • Eclipse Tomcat Configuration
  • Docker-14.项目部署-DockerCompose
  • Docker入门:容器化技术的第一堂课
  • 飞算JavaAI赋能高吞吐服务器模拟:从0到百万级QPS的“流量洪峰”征服之旅
  • Linux软件编程:进程与线程(线程)
  • ruoyi-vue(十一)——代码生成
  • 最长回文子串问题:Go语言实现及复杂度分析
  • vulnhub-lampiao靶机渗透
  • 科目二的四个电路
  • 实时视频延迟优化实战:RTSP与RTMP播放器哪个延迟更低?
  • 机器学习--数据清洗
  • 音频分类标注工具
  • RAC环境redo在各节点本地导致数据库故障恢复---惜分飞
  • python pandas库 series如何使用
  • React 19 核心特性
  • Java基础 8.17
  • Android面试指南(二)
  • 如何让AI视频模型(如Veo)开口说中文?一个顶级提示词的深度拆解
  • 深入解析Tomcat Processor的协议处理机制
  • Linux Shell定时检查日期执行Python脚本
  • 安装pytorch3d后报和本机cuda不符
  • 照相机标定-动手学计算机视觉16
  • 计算机网络 Cookie 和 Session 的区别详解
  • 【递归、搜索与回溯算法】记忆化搜索
  • C语言零基础第19讲:自定义类型—联合体和枚举
  • 1. Docker的介绍和安装
  • 区块链练手项目(持续更新)
  • 电容,三极管,场效应管
  • 【状压DP】3276. 选择矩阵中单元格的最大得分|2403
  • 电动车安全技术全解析:从传统制动到智能驾驶的技术革命