c++中的类定义的对象占有的内存空间含有数据成员和虚函数表的地址,

来源:百度知道 编辑:UC知道 时间:2024/05/18 20:43:40
那么对象内存中没有存储关于成员函数的信息吗,到时怎么调用呢

如果一个类包含了数据和函数,但是每个类对象占用的存储空间只是该对象的数据部分所占用的存储空间。具体可以用sizeof()计算。

每一个类的成员函数有一个this指针,它是指向本类对象的指针,它的值就是当前被调用的成员函数所在对象的起始地址。例如:

class Object
{
publice:
int x;
int y;
void display(){cout<<x<<y<<endl;}
};

Object a,b;//定义了Object类的两个对象
a.display();//调用类的成员函数,现在有两个类的对象a和b,怎么知道是哪个对象在调用display函数呢?编译系统就把对象a的起始地址赋给display的this指针,于是在成元函数引用数据成员时(x和y),就按照this指针找到对象a的数据成员。display函数实际是执行:cout<<this.x<<this.y<<endl;

如果有虚函数的话 类的第一个成员将是一个隐含的的虚函数表指针。

否则,调用什么函数完全由对象的表达式类型决定。比如一个表达式的类型是类A你对这个表达式用.f()的话调用的就是A::f()