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

面向对象程序设计———组合、委托 与 继承

1、组合 has-a

一个类中有另外一个类的对象,这种关系就叫组合。表现为 has-a

1.1 组合类对象占内存的大小

组合类的大小包括他组合的所有类对象的大小。
在这里插入图片描述

1.2 组合类的构造 和 析构

构造由内而外: 先执行内部类的默认构造函数,再执行自己的构造函数。(执行内部类构造函数的过程由编译器完成,如果不想调用默认构造函数,那么必须手动在初始化列表的位置调用我们想用的构造函数)

析构由外而内: 先执行自己的析构函数,再执行内部类的析构函数。(执行内部类析构函数的过程也由编译器完成)

2、委托

一个类中有指向另外一个类的指针,这种关系就叫委托。

注意:只是有一个指针,至于什么时候真的有指向的那个对象还不清楚。所以两个对象的寿命不一定相同,这点和组合有很大的区别。

3、继承 is-a

3.1 构造和析构

构造由内而外: 先调用父类的默认构造函数,再执行自己的。(构造父类的过程由编译器完成)
析构由外而内: 先执行自己的析构函数,再调用父类的析构函数。(析构父类的过程也由编译器完成)

3.2 虚指针vptr 和 虚表vtbl

某继承体系的虚指针 和 虚表如下图所示。
在这里插入图片描述
下面通过汇编来展示具体的调用过程:
在这里插入图片描述
在这里插入图片描述

相关文章:

  • C++设计模式
  • C++ 嵌套类
  • CMake指令解析 set(CMAKE_CXX_FLAGS “$ENV{CXXFLAGS} -rdynamic -O3 -fPIC -ggdb -std=c++11 -Wall -Wno-deprec
  • 记一个测试sylar服务器日志模块时遇到的一个非常奇怪的问题
  • syscall()
  • 记一个编写宏时的错误
  • C++中全局变量,静态变量,静态局部变量 的初始化和内存分配问题
  • C++ 模板实现单例模式
  • 《C++ Primer》 异常
  • C++父类和子类指针的相互赋值和转换
  • 算法设计与分析————期末死亡冲刺
  • 现代软件工程————期末死亡冲刺
  • std::string::npos 常量解析
  • 练习4-3 求给定精度的简单交错序列部分和 (15 分)本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
  • 浙大版《C语言程序设计(第4版)》题目集 练习4-6 猜数字游戏 (15 分)
  • SegmentFault for Android 3.0 发布
  • 【剑指offer】让抽象问题具体化
  • 2018一半小结一波
  • AWS实战 - 利用IAM对S3做访问控制
  • bootstrap创建登录注册页面
  • GraphQL学习过程应该是这样的
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Javascript弹出层-初探
  • JavaScript对象详解
  • JS+CSS实现数字滚动
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • NSTimer学习笔记
  • php的插入排序,通过双层for循环
  • Python学习笔记 字符串拼接
  • Vue.js 移动端适配之 vw 解决方案
  • Yeoman_Bower_Grunt
  • 动态魔术使用DBMS_SQL
  • 汉诺塔算法
  • 浅谈web中前端模板引擎的使用
  • 因为阿里,他们成了“杭漂”
  • 转载:[译] 内容加速黑科技趣谈
  • ​批处理文件中的errorlevel用法
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ./configure,make,make install的作用(转)
  • .net Application的目录
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net6+aspose.words导出word并转pdf
  • /etc/fstab和/etc/mtab的区别
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ JavaScript ] JSON方法
  • [acwing周赛复盘] 第 69 场周赛20220917