Compiling Object-Oriented Languages
C++ 的多重继承
教材 12.3.2 介绍了处理多重继承的两种方法:
- 被重复继承的类有多个实例
- 被重复继承的类有唯一的实例 C++ 包含对上述两种方法的支持,前者在C++中称重复继承,后者称为虚拟继承。
作业1
- 请编写尽量简洁的 C++ 程序,它应能:
- 包含对上述两种多重继承的类定义
- 针对每种多重继承,给出对类中各种数据成员和方法成员的访问代码(含输出对应的成员的地址)
- 书面总结两种多重继承的使用方法和实现特点,记录下你在编写上述程序中遇到的主要错误以及出错原因
- 上述程序和文档提交到git库的
homework/oo
目录下
作业2
在 作业1 的基础上,进一步开展如下工作:
- 修改作业1的代码, 增加或改进你希望修改的内容, 将修改后的代码编译、链接得到可执行文件, 假设为
oohw
- 使用
objdump -dS oohw | less
或者objdump -dS oohw > oohw-dS.txt
查看oohw
的反汇编码 - 查看源码中类成员(域或方法)名 在反汇编的代码中变成了什么,总结这种名字变换是否存在什么规律。注:可以在网上调研
- 查看源码中的
printf
或cout
在反汇编的代码中变成了什么名字,并且它们在反汇编码中对应什么,对应有要执行的代码吗? - 采用静态连接的方式重新编译源代码得到可执行程序
oohw1
,进一步参照 第4点 回答printf
或cout
在反汇编的代码中的对应情况
书面总结面向对象语言中类成员被编译的特征,静态和动态连接产生的代码特征。相关程序和文档提交到git库的 homework/oo
目录下,注意在该目录下提供提交说明文档。