C++的深度剖析教程--------static成员变量和函数及其应用
C++的类的静态成员变量
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;class test
{
public:
string name;
public:
static int i; //声明和定义
};
/*
声明表示向编译器提出了说了一下,但是这里的i变量并没有占有实际的地址空间,是不能够使用这个变量的
定义: 编译器在内存中定义了一个空间
*/
int test::i = 2; //这一步实在定义并且初始化的过程
int _tmain(int argc, _TCHAR* argv[])
{
class test test1;
class test test2;
test1.name = "huxioaguangn";
test2.name = "guanggproguan";
test1.i = 3;
cout << test1.name;
cout << test2.name;
cout << test::i;
return 0;
}
程序的解读看注释:
程序在内存中的分布:
总结:
static修饰的成员变量,在内存中只能维护一份。 在类中只是声明了一下。 需要在类外定义,才能使用
int test::i = 2;
访问的方式:
1.采用类名访问 test.i = 2
2.采用类定义出来的类访问 例如test1.i
static使用的场景:
如果一个数据需要被所有对象共享使用的时候,
这时候即可好实用static修饰。
static成员变量和普通成员函数的区别
数量与存储位置上的区别:
1. 静态成员变量是存储方法 区内存中,而且只会存在一份数据。
2. 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据
作用上的区别:
1. 静态的成员变量的作用共享一个 数据给所有的对象使用。
2. 非 静态的成员变量的作用是描述一类事物的公共属性
数量与存储位置上的区别:
1. 静态成员变量是存储方法 区内存中,而且只会存在一份数据。2. 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据。
生命周期的区别:
1. 静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失。2.非静态的成员数据是随着对象的创建而存在,随着 对象被垃圾回收器回收而消失。
static成员函数:
static成员函数 和 非static成员函数的唯一的区别再有 。staitc成员函数是不带this指针的
即:说明static 无法访问成员变量的
static成员函数 最大的用处是用来修饰static变量
总结:
const volatic等等其实实质上都是用来修饰 this指针的。