【发布时间】:2019-08-12 09:37:25
【问题描述】:
我正在阅读Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides 所著的Design Patterns一书。
第 11 页,上面写着:
"一个对象将数据和对数据进行操作的procedures 打包在一起"。
但我还有一个问题:
当您使用 C++ 编码时:
当一个对象被实例化时,它自己的汇编代码中真的有编译器生成的方法吗?
还是所有objects的方法都是同一个类生成的?
这是我很久以来的一个问题。
提前谢谢你。
【问题讨论】:
-
你为什么在乎?这两种情况有什么明显的区别吗?
-
您引用的部分是关于概念的(在许多语言中都适用),而您的问题是关于实现细节的,那是完全不同的故事,不清楚您的问题到底是什么。
-
该方法对所有对象都是通用的,它有一个隐式参数 (
this) 允许它对任何特定对象进行操作。这就是所有 C++ 实现的操作方式,但该语言实际上并不需要这个 (AFAIK)。 -
添加。致@john:如果您想知道
this是如何为每个成员函数调用初始化的......调用成员函数的对象(地址)通常像内部的其他参数一样传递。 (当我偶然发现和你一样的问题时,我曾经在查看 ASM 代码时发现了这一点。);-) -
为了更好地解释我的问题:假设您在 C++ 中有 2 个 C 类的对象 a 和 b。假设 C 有一个方法 f。 a 和 b 在编写时封装变量和方法。但是 Do a 和 b 对于同一个函数 f 有自己的代码。还是f在Assembly中只定义了一次,而a和b在调用f时调用的是同一个位置?
标签: c++ oop object design-patterns