c++派生类对象赋值给基类对象

基类与派生类对象之间的赋值兼容关系(C++ 学习笔记 35)   不同类型的数据之间的自动转换和赋值,称为赋值兼容。   在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的 赋值兼容规则 是指在需要基类对象的任何地方,都可以使用 公有派生类的对象 来替代。     通过公有继承,派生类保留了基类中除构造函数、析构函数之外的所有成员,基类的公有或保护成员的访问权限在派生类中全部原样保留了下来,在派生类外可以调用基类的公有成员函数访问基类的私有... 阅读详情
基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。

        一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如:

[cpp]  view plain  copy
  1. Father a ;    // 基类对象  
  2. Son b ;       // 派生类对象  
  3. a = b ;       // 可以  
  4. b = a ;       // 不可以  


       为什么派生类对象可以给基类对象赋值呢?反之则不可以呢?这是因为基类对象a的成员比派生类对象b的成员少。所以基类对象赋值给派生类对象时会出错。上面是一种情况,还有另外一种情况:

[cpp]  view plain  copy
  1. Father a ;                  // 基类对象  
  2. Son b ;                     // 派生类对象  
  3. Father *pa = &b ;     // 可以  
  4. Son *pb = &a ;         // 不可以  


       上面的指针赋值也就是说:基类的指针可以指向派生类对象,但是反过来则不行,派生类的指针不可以指向基类的指针。这是为什么呢?这是因为派生类的对象所占的存储空间通常要比基类的对象大,原因就是派生类除了继承基类的成员之外,还拥有自己的成员,所以基类的指针操作派生类的对象时,由于基类指针会向操作基类对象那样操作派生类对象,而基类对象所占用的内存空间通常小于派生类对象,所以基类指针不会超出派生类对象去操作数据。

       同样的道理,基类的引用可以作为派生类对象的别名,但是反过来则不行,派生类的引用不可以作为基类对象的别名。例如:

[cpp]  view plain  copy
  1. Father a ; // 基类对象  
  2. Son b ;    // 派生类对象  
  3. Father &f = b ; // 可以  
  4. Son &s = a ;    // 不可以   


C++将派生类赋值给基类(向上转型) C++将派生类赋值给基类(向上转型) 在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍。例如: int a = 10.9; printf("%d\n", a); 输出结果为 10,编译器会将小数部分直接丢掉(不是四舍五入)。再如: float b = 10; 阅读详情

相关推荐

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1291

基类对象和派生类对象之间的赋值关系

基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。         一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如: Father a ; // 基类对象 Son b ; // 派生类对象 a = b ; // 可以 b = a ; // 不可以        为什么

2458

WPS制作甘特图实操(带图超详细)

一、数据准备 图1 二、添加公式 在表格的E3处添加公式:=IF(C3>=G3,0,IF(C3+D3>=G3,G3-C3,D3)),点击该单元格的右下角。使鼠标箭头变“+”后下拉拖拽,复制该公式。F3处的公式为:=D3-E3,使用相同的拖拽方式复制公式应用,操作完毕如下图3. 图2 图3 三、插入图表 1、选中方框1内容,按住ctrl按键,继续选择2、3列的内容,点击插入全部图表中的条形图,选择2对应的图标样式,生成图6的样式。 点击图6中的3标尺,右击选择数据弹出图8,点击+号选择表格中

m0_49047167的博客 3万+

[ C++ ] 继承

面向对象编程的主要目的之一是提供可重用的代码,C++提供了一个方法来扩展和修改类。这种方法叫做类继承。它能够从已有的类派生出新的类,而派生类继承了原有类(称为基类)的特征,包括方法。

优快云博客 1228

STM32H743 LAN8720网口配置避坑指南:用CubeMX v6.5.0快速搞定LWIP+FreeRTOS

本文详细介绍了使用CubeMX v6.5.0配置STM32H743与LAN8720网口的LWIP+FreeRTOS方案,涵盖硬件连接、时钟配置、ETH外设初始化及LWIP协议栈调优等关键步骤。特别针对常见陷阱提供解决方案,帮助开发者快速实现稳定网络通信,适用于嵌入式网络开发场景。

weixin_33739523的博客 356

Hi3516CV610开发板ISP调优实战——从在线调试到参数固化部署全流程

本文详细介绍了Hi3516CV610开发板ISP参数从在线调试到固化部署的全流程。针对调试参数重启丢失的痛点,重点解析了如何从PQTools安全导出参数、进行格式转换与适配,并通过烧录工具或系统更新两种路径将参数永久固化至Flash。最后提供了双重验证与常见问题排查方法,确保调优效果在产品中稳定生效。

weixin_29169505的博客 423

c++第十一天(基类与派生类的赋值问题和动态多态)

基类与派生类的赋值问题

open_python的博客 1793

解决屏幕不亮难题:慷智SerDes DE信号极性配置避坑指南

本文深入探讨了基于慷智AIM95x系列SerDes芯片的嵌入式显示系统开发中,因DE信号极性配置不匹配导致屏幕不亮的典型故障。文章详细解析了DE信号的核心作用与极性定义,提供了慷智SerDes芯片中DE极性寄存器的具体配置方法与调试记录,并给出了从隔离问题、对比时序到波形验证的系统性排查流程,帮助工程师快速定位并解决此类隐蔽问题。

weixin_29185493的博客 139

基类和派生类对象之间的赋值

class A{}Class B:public A{}A aobject;B bobject; 有关 (1)aboject=bobject; (2)bobject=aboject; 的说明。 =============================================================================(1)aobject=bobject; 调用defau

rockaka's Blog 1425

MFC Tab Control控件完全指南:从基础使用到高级定制

本文详细介绍了MFC中TabControl控件的使用方法和高级技巧。主要内容包括:1) TabControl基础属性设置与绑定;2) 样式定制和外观自定义;3) 创建派生类实现扩展功能;4) 动态页面管理和子对话框控制;5) 高级功能如标签拖拽排序和右键菜单。通过完整代码示例,展示了从基本应用到复杂场景的实现方案,包括多标签页管理、自定义绘制、动态添加/删除标签等核心功能,为MFC开发者提供了全面的TabControl开发指南。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 257

基于单片机的宠物狗智能项圈设计

GPS定位功能:利用GPS模块实时获取宠物的位置,帮助主人追踪宠物的活动轨迹。活动监测:使用加速度传感器监测宠物的活动情况,如运动、休息等,并进行分析。健康监测:集成心率传感器,实时监控宠物的心率,以确保其健康。声音识别功能:通过麦克风捕捉宠物的叫声,检测宠物的状态(如饥饿、疼痛等)。蓝牙/Wi-Fi通信:通过蓝牙或Wi-Fi模块与手机APP或云端平台进行数据交互,实时反馈宠物的状态信息。电池管理:实现低功耗设计,确保设备的续航能力。

2201_76125393的博客 2279

C++继承 ——基类和派生类对象赋值转换

基类和派生类对象赋值转换: 派生类对象 可以赋值为 基类的对象 / 基类的指针 / 基类的引用。 基类对象不能赋值给派生类对象。 基类的指针可以通过强制类型转换赋值给派生类的指针,但是必须是基类的指针是指向派生类对象时才是安全的。 #include <iostream> using namespace std; #include <string> class Person { protected : string _name; // 姓名 string _sex; .

XHumble的博客 2032

【Tiny_CD】Tiny_CD变化检测网络详解(含python代码)

tiny-cd网络详解,含论文下载、代码下载地址。

向上生长的程序媛的博客 2161

【C++】继承定义及基类与派生类对象赋值转换

1.继承概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 具体定义格式如下: 继承关系与访问限定符有: 继承方式:public继承、protected继承、privat...

swag_wg的博客 814

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++:基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量。 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量。这种不同类型之间的自动转换,称为赋值兼容。在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来代替。因为,...

dienangpiao2051的博客 911

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++继承详解——基类派生类对象赋值转换、菱形虚拟继承

详细讲解C++特性——继承,派生类的默认构造函数(及派生类和基类的函数顺序),基类和派生类的赋值转换,继承的3个模型——单继承、多继承、菱形继承。并且讲解菱形继承的菱形虚拟继承(原理:虚基表存偏移量),最后对继承总结,并提出组合。

bang___bang_的博客 2524

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++派生类对象和基类对象赋值

在C++中,我们允许 将派生类对象赋给基类对象。(不允许将基类对象赋给派生类对象) 只会将基类对象成员赋值 用基类指针指向派生类对象。(不允许用派生类指针指向基类对象) 基类指针只能操作基类中的成员 基类引用作为派生类的别名。(不允许派生类引用作为基类的别名) 基类引用只能访问基类成员 原因很简单,派生类一般含有基类没有的成员,将派生类赋给基类成员我们才能保证基类中每个成员都能被赋值,用基类指...

T_T233333333的博客 957

C++ 派生类对象赋值给基类对象时的情况

B b = a;

emaillk的博客 1056

c++基类和派生类对象的赋值转换——赋值兼容规则

由于b是double类型,所以赋值给int类型的引用前,要先进行隐式类型转换,这中间会生成临时对象,类是对象具有常性,所以int&之前应该加上const。1.公有有继承中,派生类对象可以赋值给基类对象/指针/引用。形象的说法叫做切割或切片,就是将派生类中父类的那一部分切过去。如上,当把public去掉后,就出错了。难道是没有产生临时对象吗?2.基类对象不能赋值给派生类对象。

zyh20050430的博客 428

C++----基类和派生类对象的赋值与转换

对象赋值:子类对象赋值给基类对象会发生切片,子类特有部分丢失。向上转型(子类 → 基类):始终安全。向下转型(基类 → 子类):必须小心,强制转换不安全,只有当指针真实指向派生类对象时才有效。使用 dynamic_cast能在运行时检查类型,避免未定义行为。

w_z_j 423

【C++】4.5 基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 【定义】不同类型数据之间的自动转换和赋值,称之为赋值兼容 【基类与派生类对象之间的赋值兼容关系】需要基类对象的任何地方,都可以使用公有派生类对象替代。 【替代的四种情况】 说明:Base为基类,Derived为公有派生类 (1)派生类对象可以向基类对象赋值 Base b; Derived d; b=d; //用派生类对象d对基类对象b...

Alvin的博客 1145

C++基类和派生类赋值(初始化)规则 (记录)

在公有派生的情况下,有以下三条赋值兼容规则。 派生类的对象可以赋值给基类对象。 派生类对象可以用来初始化基类引用。 派生类对象的地址可以赋值给基类指针,亦即派生类的指针可以赋值给基类的指针。 上面三条反过来是不成立的。例如,不能把基类对象赋值给派生类对象。 下面的程序能够成功编译,充分说明了上述三条规则。   class A { }; class B : public A //公...

Mr.W的博客 2666

基类与派生类对象之间的赋值问题

一、将派生类对象赋值给基类对象? 注意:这不同于将派生类对象赋值给基类的引用或者指针 请看如下代码: Base b; //基类对象 Derived d; //派生类对象 b=d; //赋值 这将使用哪一个运算符呢?赋值语句实际上会被转换为下面的语句: b.operator=(d); 其中左边的对象是基类对象,所以调用的是基类中的赋值运算符重载函数,右边的对象作为传入的参数。而实参与形参结合的过程实际上就是派生类对象赋值给基类对象的引用。所以,b=

weixin_43850474的博客 3808
上一篇: 搜索专题训练hdu1043Eight
下一篇: 背包dp模板
Qer_
博客等级 码龄11年 34粉丝 69原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值