C++类成员函数存储方式
2017-04-18 22:42
162 查看
*类的成员函数是不占类空间的。
当我们实例化一个对象的时候,因为这个对象是用类定义的,那么它理所当然拥有了这个类的数据和函数。但是,一般情况下,不同的对象,他们的的数据值不同,但是函数的代码都相同。所以,为了节约存储空间(想象一下我们如果定义了100个对象,那么用100段内存空间存储相同的代码,岂不是很浪费?),我们让成员函数的代码共享。
所以类的成员函数,对于类来讲。一方面是逻辑上的“属于”,一方面是物理上的“不依赖“。
我们把成员函数的代码存储在对象空间之外。换句话说,成员函数的代码,都不占据对象的存储空间。它会被存在其他地方。
一个类对象的空间=所有类成员变量的大小
如果这个对象的类有虚函数的话,还可能多一个指向虚表的指针
所有函数存放在独立于对象的存储空间内
对象调用函数时,对静态成员函数直接调用不存在问题,对成员函数需要把自己以this指针传给函数以指明以哪个对象调用
所以用未初始化的指针调用静态成员函数、或者调用未使用任何成员变量的成员函数(即未用到this指针)
当我们实例化一个对象的时候,因为这个对象是用类定义的,那么它理所当然拥有了这个类的数据和函数。但是,一般情况下,不同的对象,他们的的数据值不同,但是函数的代码都相同。所以,为了节约存储空间(想象一下我们如果定义了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; }
相关文章推荐
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
- c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
- C++类的成员函数存储方式(是否属于类的对象)
- C++:静态成员函数,静态数据成员,成员函数存储方式
- c++成员函数存储方式
- C++类成员在内存中的存储及对齐方式
- c++类的成员函数在定义对象前分配了存储空间吗?
- C++成员函数存储方式
- 类的成员函数存储方式(是否属于类的对象)
- c++类中数据成员和成员函数的储存方式
- C++成员函数的存储方式
- C#中使用托管C++类,委托调用,以供托管C++类的成员函数回调的实现方式
- C++成员函数的存储方式
- c++类的成员函数、数据成员存储方式(是否属于类的对象)
- c++成员函数的存储方式---11
- C++:类的成员函数存储方式(是否属于类的对象)
- C++成员函数在内存中的存储方式
- C++:静态成员函数,静态数据成员,成员函数存储方式
- C++成员函数的存储方式