class M{
public:
M();
~M();
void m_fun();
}
int main(){
M a;
M b;
a::m_fun();
b::m_fun();
return 0;
}
在main函数中创建了两个变量a,b,同时在对应的内存地址内创建了M类的两个对象,那么M类的方法,比如m_fun(),是否被创建了两次,换句话说,a,b两个变量对应的内存空间中是否各自存在m_fun()的代码?若是这样,面向对象中的方法是否具有面向过程中函数的复用性?
M 的内存分配包含了 M 的成员,就像 C 的 struct 一样。成员函数只是个普通函数,只是函数名字被类名修饰过,类的内存布局里也有虚函数表保存函数指针指向普通函数内存地址。深入理解请阅读 《深度探索C++对象模型》一书,C++ 标准在演化,不过基本原理不会变。
编译器会为每个对象的成员变量单独分配存储空间,但是所有对象是共用成员函数代码的
并且C++的类成员函数经过c++编译器处理之后会编译成全局函数,调用相关成员函数时,会隐式传递当前对象
你分别测一下一个对象和两个对象程序的大小