Compiling Object-Oriented Languages

C++ 的多重继承

教材 12.3.2 介绍了处理多重继承的两种方法:

  • 被重复继承的类有多个实例
  • 被重复继承的类有唯一的实例 C++ 包含对上述两种方法的支持,前者在C++中称重复继承,后者称为虚拟继承。

作业1

  • 请编写尽量简洁的 C++ 程序,它应能:
    • 包含对上述两种多重继承的类定义
    • 针对每种多重继承,给出对类中各种数据成员和方法成员的访问代码(含输出对应的成员的地址)
  • 书面总结两种多重继承的使用方法和实现特点,记录下你在编写上述程序中遇到的主要错误以及出错原因
  • 上述程序和文档提交到git库的 homework/oo目录下

作业2

在 作业1 的基础上,进一步开展如下工作:

  1. 修改作业1的代码, 增加或改进你希望修改的内容, 将修改后的代码编译、链接得到可执行文件, 假设为 oohw
  2. 使用 objdump -dS oohw | less 或者 objdump -dS oohw > oohw-dS.txt查看 oohw的反汇编码
  3. 查看源码中类成员(域或方法)名 在反汇编的代码中变成了什么,总结这种名字变换是否存在什么规律。注:可以在网上调研
  4. 查看源码中的 printfcout 在反汇编的代码中变成了什么名字,并且它们在反汇编码中对应什么,对应有要执行的代码吗?
  5. 采用静态连接的方式重新编译源代码得到可执行程序 oohw1,进一步参照 第4点 回答 printfcout 在反汇编的代码中的对应情况

书面总结面向对象语言中类成员被编译的特征,静态和动态连接产生的代码特征。相关程序和文档提交到git库的 homework/oo目录下,注意在该目录下提供提交说明文档。

results matching ""

    No results matching ""