C++类成员函数存储方式

来源:互联网 发布:snh 知乎 编辑:程序博客网 时间:2024/05/16 10:11

*类的成员函数是不占类空间的。
当我们实例化一个对象的时候,因为这个对象是用类定义的,那么它理所当然拥有了这个类的数据和函数。但是,一般情况下,不同的对象,他们的的数据值不同,但是函数的代码都相同。所以,为了节约存储空间(想象一下我们如果定义了100个对象,那么用100段内存空间存储相同的代码,岂不是很浪费?),我们让成员函数的代码共享。

所以类的成员函数,对于类来讲。一方面是逻辑上的“属于”,一方面是物理上的“不依赖“。
我们把成员函数的代码存储在对象空间之外。换句话说,成员函数的代码,都不占据对象的存储空间。它会被存在其他地方。

一个类对象的空间=所有类成员变量的大小

如果这个对象的类有虚函数的话,还可能多一个指向虚表的指针

所有函数存放在独立于对象的存储空间内

对象调用函数时,对静态成员函数直接调用不存在问题,对成员函数需要把自己以this指针传给函数以指明以哪个对象调用

所以用未初始化的指针调用静态成员函数、或者调用未使用任何成员变量的成员函数(即未用到this指针)

#include<iostream>using namespace std;class A{private:    int a;    double b;    char c;    static int d;public:    void printf()    {        cout<< "shakalaka" <<endl;    }    virtual output()    {        cout<< "lalala" <<endl;    }};int main(){    A a;    cout<< sizeof(a) <<endl;    return 0;}
0 0