• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++派生类与基类的转换规则

C++派生类与基类的转换规则

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了派生类调用基类函数,基类和派生类,派生类继承基类默认为,派生类是基类的组合,派生类是基类的子集等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能。基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替。
具体表现在以下几个方面:
派生类对象可以向基类对象赋值。
可以用子类(即公用派生类)对象对其基类对象赋值。如
A a1; //定义基类A对象a1
B b1; //定义类A的公用派生类B的对象b1
a1=b1; //用派生类B对象b1对基类对象a1赋值
在赋值时舍弃派生类自己的成员。
实际上,所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题。请注意: 赋值后不能企图通过对象a1去访问派生类对象b1的成员,因为b1的成员与a1的成员是不同的。
假设age是派生类B中增加的公用数据成员,分析下面的用法:
a1.age=23;//错误,a1中不包含派生类中增加的成员
b1.age=21; //正确,b1中包含派生类中增加的成员
应当注意,子类型关系是单向的、不可逆的。B是A的子类型,不能说A是B的子类型。
只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值,理由是显然的,因为基类对象不包含派生类的成员,无法对派生类的成员赋值。同理,同一基类的不同派生类对象之间也不能赋值。
派生类对象可以替代基类对象向基类对象的引用进行赋值或初始化。
如已定义了基类A对象a1,可以定义a1的引用变量:
A a1; //定义基类A对象a1
B b1; //定义公用派生类B对象b1
A& r=a1; //定义基类A对象的引用变量r,并用a1对其初始化
这时,引用变量r是a1的别名,r和a1共享同一段存储单元。也可以用子类对象初始化引用变量r,将上面最后一行改为
A& r=b1;//定义基类A对象的引用变量r,并用派生类B对象b1//对其初始化
或者保留上面第3行“A& r=a1;”,而对r重新赋值:
r=b1;//用派生类B对象b1对a1的引用变量r赋值
注意: 此时r并不是b1的别名,也不与b1共享同一段存储单元。它只是b1中基类部分的别名,r与b1中基类部分共享同一段存储单元,r与b1具有相同的起始地址。
如果函数的参数是基类对象或基类对象的引用,相应的实参可以用子类对象。如有一函数
我们会在下一讲解决这个问题,办法是使用虚函数和多态性 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详谈C++中虚基类在派生类中的内存布局
  • 实例讲解C++编程中的虚函数与虚基类
  • 详解C++中基类与派生类的转换以及虚基类
  • C++中基类和派生类之间的转换实例教程
  • C++派生类与基类的转换规则

相关文章

  • 2017-05-28C++虚函数表实例分析
  • 2017-05-28C++中的函数指针与函数对象的总结
  • 2017-08-17C++构造函数和析构函数的调用顺序
  • 2017-12-08C++实现插入排序
  • 2017-05-28c++ const引用与非const引用介绍
  • 2017-05-28C语言创建链表错误之通过指针参数申请动态内存实例分析
  • 2017-05-28浅谈c/c++中使用指针需要注意的问题
  • 2017-05-28简单总结C语言中各种类型的指针的概念
  • 2017-05-28详谈全排列next_permutation() 函数的用法(推荐)
  • 2017-05-28利用C++实现最长公共子序列与最长公共子串

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言实现类似wget的进度条效果
    • websocket++简单使用及实例分析
    • C++之CNoTrackObject类和new delete操作符的重载实例
    • C语言解决螺旋矩阵算法问题的代码示例
    • 基于c语言知识点的补遗介绍
    • 循环队列详解及队列的顺序表示和实现
    • 利用C/C++二进制读写png文件的方法示例
    • 浅析C/C++中的可变参数与默认参数
    • C++多态的实现及原理详细解析
    • c语言实现字符串中单词的反转

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有