C++程序设计基础【三】(类之间的关系)

这篇具有很好参考价值的文章主要介绍了C++程序设计基础【三】(类之间的关系)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、继承关系

在C++中,最一般的类被称为基类,而更具体地类被称为派生类,更一般的类也称为超类,更具体的类也称为子类
派生类继承了基类中的所有成员(有些例外),它还可以添加新成员

1.继承关系

最常用的继承是公共继承
基类中的公共成员称为派生类中的公共成员
要对基类和派生类中的函数使用相同的名称,需要重载或者重写的成员函数
构造函数、析构函数和赋值运算符未被继承,必须重新定义它们
在委托中,派生的成员函数使用类解析运算符(::)将其部分职责委托给基类
在调用中,派生类的构造函数在初始化期间调用基类的构造函数,这不需要类解析运算符
私有数据成员封装性更强,受保护数据成员可简化派生类的编码()
使用修饰符final防止被继承
李斯柯夫替代原则表明超类的对象必须始终可由子类的对象替代,而不改变超类的任何属性
私有继承不定义类型继承,它定义实现继承

2.关联关系

1.聚合关系

聚合是从聚合者到被聚合者的一对多关系
在聚合中,被聚合者的生命周期独立于聚合者的生命周期
(分开实例化)

2.组合关系

被包含者的生命周期取决于包含者的生命周期
被包含者是在包含者对象内创建的,它们不具有独立的生命周期
被包含者的生命周期取决于包含者的生命周期
(只有一个类实例化)

3.依赖关系

类A依赖类B,需要使用类B

二、多态性

1. 多态性

1.多态性的条件

多态性的三个条件分别是指针或者引用、可交换对象和虚函数
C++建议我们总是为多态性的基类定义一个显式析构函数,并使其称为虚函数,使用虚析构函数可以防止多态性中可能发生的内存泄漏

2.绑定

1.静态绑定

静态绑定出现在一个函数包含多个定义时,但编译器在编译程序时知道要使用哪个版本的定义

2.动态绑定

当编译期间对象未知时,需要进行动态绑定

3.运行时类型信息

1.使用typeid运算符

使用typeid(*).name返回类名的长度和名称

2.使用dynamic_cast运算符

使系统增加大量开销,不建议使用

2.抽象类

具体类可以实例化并创建改类型的对象
抽象类是具有至少一个纯虚函数的类
无法实例化抽象类,因为抽象类中没有纯虚成员函数的定义
接口时抽象类的一种特殊情况,其中所有成员函数都是纯虚函数

3.多重继承

1.虚基继承

对于多重继承中重复的共享数据成员的问题的解决方案之一是使用虚基继承,中间类可用virtual关键字从公共基继承,设置共有的数据成员为受保护数据成员

2.混入类

mixin类是另一个解决方案,mixin类永远不会被实例化,但mixin类可以向其他类添加数据成员文章来源地址https://www.toymoban.com/news/detail-466482.html

到了这里,关于C++程序设计基础【三】(类之间的关系)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++《面向对象程序设计课程设计》

    《面向对象程序设计课程设计》课程说明 适用专业:计算机科学与技术 课程周数:5周 一、根据计算机科学与技术专业人才培养方案制订。 (一)课程设计性质 课程设计是学生对课程所学知识的综合运用,它与课堂听讲、上机实验、课外练习、自学研究相辅相成,构成一个

    2024年02月08日
    浏览(51)
  • 【高级程序设计语言C++】特殊类设计

    拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 用C++11的话,可以使用特殊的语法来实现一个不能被拷贝的类。在C++11中,可以使用删除函数(deleted function)来禁用拷

    2024年02月10日
    浏览(51)
  • C++ 程序设计入门

    ✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 程序是算法与数据结构的载体,是计算机用以

    2024年02月11日
    浏览(38)
  • C#程序设计之windows应用程序设计基础

    题目描述 设计一个“简单通讯录”程序,在窗体上建立一个下拉式列表框、两个文本框和两个标签,实现以下功能:当用户在下拉式列表框中选择一个学生姓名后,在“学生姓名”、“地址”两个文本框中分别显示出对应的学生和地址。 代码 窗体代码 运行结果 题目描述 设

    2024年02月06日
    浏览(50)
  • 【C++ 程序设计】第 1 章:C++ 语言简介

    目录 一、C++ 语言的发展简史 二、C++ 语言的特点 (1)基本的输入/输出 (2)头文件和命名空间 (3)强制类型转换运算符  (4)函数参数的默认值  (5)引用和函数参数的传递 ① 引用的定义 ② 引用在函数中的使用 (6)const 与指针共同使用 (7)内联函数  (8)函数的

    2024年02月07日
    浏览(90)
  • 【软件设计师07】程序设计语言与语言处理程序基础

    编译与解释、文法、正规式、有限自动机、表达式、传值与传址、多中程序语言特点 (逐渐降低考察比例,很少考察) 概念 文法类型 语法推导树 有限自动机 与正规式(重点) 常见问题:给一个串比如01、10、001等,看图中起点到终点能否连起来得到这样的串 正规式 是有限自

    2023年04月08日
    浏览(62)
  • 【高级程序设计语言C++】初识模板

    概念: 函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 具体格式: templatetypename T1, typename T2,…,typename Tn 返回值类型 函数名(参数列表){} 输出结果: typename是用来定义模板参数,也可以使用class(切记

    2024年02月15日
    浏览(46)
  • C++程序设计函数部分(定义+实例)

    目录 1、内联函数 2、默认形参值函数 3、重载函数 4、系统函数 (1)定义 在函数前面加上 inline 申明 eg: inline double CalArea(double radius) { return 3.14*radius*radius; } void main() { double r(3.0); double area; area=CalArea(r); coutareaendl; } (2)作用 提高运行的速度。 对于一些程序代码小,运行时间

    2023年04月14日
    浏览(52)
  • Python程序设计基础:程序流程控制(一)

    程序流程的基本结构主要有三种,顺序结构、选择结构和循环结构,在顺序结构中是按照语句的位置一句一句顺序执行,每条语句有且只会执行一次,而在选择结构和循环结构中,通常是需要根据条件表达式的值来确定下一步的执行流程。 条件表达中一般使用两种运算符:关

    2024年02月11日
    浏览(47)
  • 【C++ 程序设计】实战:C++ 实践练习题(1~10)

    目录 01. 二维数组反对角线之和 02. 奇偶性  03. 指针与变量 04. 员工薪资  05. 整型值(%4d 进行格式化) 06. 求三个数中的最大值和最小值 07. 同一字母次数统计 08. 字符串回文判断 09. 闰年判断 10. 交换两个双精度数 【代码详解】 以上代码 计算的是 反对角线(从右上角到左下

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包