我已经编程了几年,所以我对创建对象时方法的内部功能有疑问。
因此,当我们在POO中创建对象时,每个对象都有其自己的属性。但实际上它们都共享相同的方法,因此它在内部如何工作?方法是否在例如C ++中指向相同的地址,在这种情况下,如果我们考虑一个具有方法基调且没有属性的类,那么从该类创建很多对象的内存“有效载荷”是什么?
换句话说,程序是否为每个对象复制了所有方法的地址点,或者是否有其他内部功能可以使它们到达其方法?
答案 0 :(得分:1)
不同的语言可以实现不同的实现。在C ++的情况下,想象编译器采用您的类方法并将其转换为自由函数。为了进行转换,将this
添加为第一个参数。
C ++
class A
{
public:
void f(bool b);
// and other members
};
A a;
a.f(true);
转换为类似的内容
struct A
{
// other members
}
void a_f(A* this, bool b);
A a;
a_f(&a, true);
因此,现在我们有了一个C
程序,没有OOP可以与之混淆。