对象是类的实例,而内存分配发生在对象的声明之时,而非类的定义之时,然而每次内存分配并不会总是为每一个对象的成员函数分配内存空间,实际上一旦成为类的定义的一部分,成员函数就会在内存中一次性的建立,因为所有的相同类的对象都使用相同的成员函数,所以并没有必要为每一个对象的成员函数分配内存空间。而对于每一个对象来说其只有数据成员才会获得相应的内存空间。
如下图所示,略微有点粗糙
静态成员函数以及静态成员数据
静态成员函数以及静态数据成员的生命周期为自程序运行开始到程序运行结束,也就是说静态成员函数和静态数据成员是在内存中一直存在的,且同一类的所有对象共享该类中所有的静态数据成员。
另,静态函数具有以下特性:
1.只能调用类中的静态成员函数,以及静态数据成员。
2.只在类的声明中加上 static 关键字,在具体定义时无需static修饰
class test { public: static void Show(); //类内定义 } void test::Show() { //具体实现方法 }
举个例子:
#include <iostream> using namespace std; class item { public: void add(int i); void show(); static void display(); private: static int count ; //不能自己赋值,系统将静态变量初始化为0 }; int item::count; //需在类的定义外声明 //因为静态数据成员是独立存放的,而不是作为对象的一部分 void item::add(int i) { count+=i; } void item::show() { cout<<"now the count is:"<<count<<"\n"; } void item::display() { cout<<"the count is:"<<count<<"\n"; //静态成员函数只能调用类内其他的静态函数以及静态数据 } int main() { item a,b,c; item::display(); //无需实例化类即可调用 a.add(1); b.add(1); c.add(1); a.show(); b.show(); c.show(); item::display(); return 0; }
运行后如下图所示:
原文地址:http://zaitebie.blog.51cto.com/11179646/1741313