九、类的静态成员变量
来源:互联网 发布:手机淘宝查看消费总额 编辑:程序博客网 时间:2024/05/17 02:03
一、成员变量的回顾
通过对象名能够访问public成员变量
每个对象都可以有只属于自己的成员变量
成员变量不能在对象之间共享
二、类的静态成员变量和静态成员函数
1、静态成员变量属于整个类(注意补水对象而是类)所有,不需要依赖任何对象,不会因为对象的产生或者销毁而被产生和销毁,需要在类外单独分配空间,存储位置为全局数据区
2、静态成员变量的访问方法:
可以通过类名直接访问public静态成员(可以不需要对象名)
也可以通过对象名访问public静态成员(通过类名和对象名都可以访问静态成员变量)
静态成员函数可以直接访问静态成员变量
三、静态成员变量的定义(成员函数和成员变量都可以通过static修饰)
##
#include<stdio.h>class Test{private: static int m;public: static int get() { return m; } static void set(int i) { m = i; }};int Test::m;//一定注意要在外部分配空间,可以初始化也可以不初始化,因为在全局数据区默认值为0int main(){ Test::set(5);;//通过类名可以直接访问,但必须是由static的情况下,但是这里 //不可以不通过set函数就来fa顾问静态成员变量,因为它是 //private的 Test t1; printf("%d\n", Test::get()); printf("%d\n", t1.get());//也可以通过定义对象后来访问 getchar(); return 0;}
注:静态成员属于类,并且类里边的所有成员及所有类的对象都可以共享里面的值
四、静态成员变量的本质:
从命名空间的角度
类的静态成员变量只是类这个命名空间中全局变量和全局函数
不同之处是,类可以对静态成员进行权限的限制,而命名空间不行
从面向的角度
类的静态成员变量属于类概念本身
类的所有对象共享相同的静态成员
五、应用,统计类的对象的个数
##
#include <stdio.h>class Test{private: static int cCount;public: static int GetCount() { return cCount; } Test() { cCount++;//创建一个对象加一次 } ~Test() { cCount--;//销毁一个对象减一次 }};int Test::cCount;//不赋初值也可以,因为在全局数据区,不赋初值时默认为0void run(){ Test ta[100]; printf("Number of Object: %d\n", Test::GetCount());}int main(){ Test t1; Test t2;//到这里之后count= 2 printf("Number of Object: %d\n", Test::GetCount());//打印2 run();//打印102 printf("Number of Object: %d\n", Test::GetCount());//打印2 printf("Press any key to continue..."); getchar(); return 0;}
六、静态成员函数与普通函数的区别
#include<stdio.h>class c1{ int a; int b; short c; short d;};struct c2{ int a; int b; short c; short d;};class c3{ int a; int b; short c; short d;static int e;//静态成员变量存在全局数据段void print()//成员函数在代码段{}};int main(){ printf("%d\n", sizeof(c1)); printf("%d\n", sizeof(c2)); printf("%d\n", sizeof(c3)); getchar(); return 0;}
结果c1、c2、c3的大小一样,都是12
原因如下:
原因如下:原因c++类对象的成员变量和成员函数是分开存储的
成员变量:
普通成员变量存储于对象中,与struct变量有相同的内存布局和字节对齐方式
静态成员变量:存储于全局数据段
成员函数:
存储于代码段
七、c++对象模型探讨
c++中的class从面向对象理论出发,将变量和函数集中定义在一起,用于描述现实世界中的类
从计算机角度,程序依然由数据段和代码段构成
那么如何进行转换?
八、this指针
静态成员函数不包含指向具体对象的指针,而普通成员函数包含一个指向具体对象的指针,即c++类中的普通成员函数都隐式包含一个指向当前对象的this指针(注意是对象)
#include <stdio.h>class Test{ int i; int j; int k; static int c;public: Test(int i, int j, int k) { this->i = i; this->j = j; this->k = k; } void print() { printf("Object Address: %08X\n", this); printf("&c = %08X, c = %d\n", &c, c); printf("&i = %08X, i = %d\n", &i, i); printf("&j = %08X, j = %d\n", &j, j); printf("&k = %08X, k = %d\n", &k, k); }};int Test::c;int main(){ Test t1(0, 1, 2); Test t2(3, 4, 5); printf("t1 Address: %08X\n", &t1); t1.print(); printf("t2 Address: %08X\n", &t2); t2.print(); printf("Press any key to continue..."); getchar(); return 0;}
- 九、类的静态成员变量
- 类的 静态成员 --- 静态成员变量 、 静态成员函数
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的静态成员变量
- 类的成员变量,对象,静态变量
- 类的静态成员函数和静态成员变量
- c++类的静态成员变量/静态成员函数
- 25-类的静态成员变量和静态成员函数
- 类成员函数的静态变量
- 类的非静态变量成员初值问题
- 为何webview保存cookie后获取不到
- 在线订单提交问题
- 一个语法的问题
- 如何j2ME中想用Timer和TimeTask来实现提示信息功能?
- λ演算
- 九、类的静态成员变量
- 新手提问,帮忙看看啊!
- 想买一个诺基亚手机,用于软件开发和测试,有什么推荐?
- RSA密码算法
- 网站整合CKEditor和CKFinder(Java版)
- 为什么说我getString()未定义?
- 实体类的用法?
- 跳转该如何写~
- 代码哪出错了呢????