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指针的。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值