C++类中的常数据成员和静态数据成员的区别
来源:互联网 发布:爱淘宝流量 编辑:程序博客网 时间:2024/05/22 17:11
刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵。
常数据成员
常数据成员是指在类中定义的不能修改其值的一些数据成员,类似于我们以前学过的常变量,虽然是变量,也有自己的地址,但是一经赋初值,便不能再被修改。
适用于类中定义一些初始化之后不希望被修改的变量。
定义方法:
const 类型名 变量名;
(1)类中的常数据成员只能通过构造函数的参数初始化表进行初始化。
(2)常数据成员是实例化对象的一部分,可以用this指针访问。
#include<iostream>using namespace std;class Happy_birthday{public: Happy_birthday(char * na):name(na){} void Print() { cout<<name<<" Happy Birthday!"<<endl; }private:const char * name;};int main(){Happy_birthday qianshou("赵哲");qianshou.Print();return 0;}
运行结果:
静态数据成员
其实常数据成员和静态数据成员完全是两码事,只不过一开始学习的时候容易混淆罢了。通过上面的解释,我们知道常数据成员类似常变量,是一种一经赋值就不可以改变的变量。
它们最大的区别就是静态数据成员是可以被修改的,而且可以被任何一个对象修改,修改后的值,可以被所有的对象共享。
静态数据成员是属于一个类的而不是某一个对象,它是为该类所定义的所有的对象所共有。该类所定义的对象都可以引用该静态成员,并且值都是一样的。
静态数据成员的存储空间不同于普通的数据成员,它不属于类的任何一个对象,是独立于对象存储的,因此也不可以通过对象的this指针来访问。
并且,静态数据成员不可以用参数初始化表进行初始化操作,原因很简单,因为初始化表是在定义对象的时候进行的利用了this指针进行操作,所以不可以。
静态数据成员的定义的方式:
static int num;
访问方式:
可以通过类名直接访问:
Test::s_num;
也可以通过对象名访问:
one.s_num;
不过为了区别于其他的成员变量,一般使用类名进行访问,因为静态数据成员不属于对象,以免使人误解。
#include<iostream>using namespace std;class Test{public:Test(int n):c_num(n){};//只能用初始化表对常数据成员赋初值 void show(){cout<<"c_num:"<<this->c_num<<endl;cout<<"s_num:"<<s_num<<endl;}void change(int n){s_num=n;} static int s_num;private:const int c_num;};int Test::s_num=100;//在类体为对静态数据成员赋初值 int main(){Test one(10);one.show();one.change(10000);//改变静态数据成员的值 cout<<"one changeed:"<<one.s_num<<endl;//使用对象名one间接访问静态数据成员 cout<<"Test changeed:"<<Test::s_num<<endl;//使用类名直接访问静态数据成员Test two(20);cout<<"two changeed:"<<two.s_num<<endl; //使用对象名two间接访问静态数据成员 two.change(99); cout<<"Test changeed:"<<Test::s_num<<endl;//使用类名直接访问静态数据成员 return 0;}
运行结果:
分析:
我们在程序中可以使用类名直接访问静态数据成员变量,就直接说明了它不属于任何一个对象的这个特点。
我们在定义对象two的时候只对c_num进行了赋值,但是我们使用two.s_num进行输出的时候也是可以输出的,这也说明了这个数据成员确实可以被所有的对象进行引用,并且值都是相同的,因为它本身就不属于任何一个对象。
好啦,大家晚安!
- C++类中的常数据成员和静态数据成员的区别
- 常对象及常成员及静态数据成员和静态成员函数的学习内容。
- C++类特殊数据成员总结(常数据成员、静态数据成员、静态常数据成员)
- 类的常数据成员
- 常成员:常数据成员和常成员函数
- 类的静态数据成员和静态成员函数浅析
- 类的静态数据成员和静态成员函数
- 类的静态成员函数和静态数据成员
- 类的静态成员函数和静态数据成员
- C++类的静态数据成员和普通数据成员的区别
- 静态成员函数,静态成员数据,常成员
- 对C++中的类的静态数据成员和静态函数成员的认识
- 静态数据成员与非静态数据成员的区别
- 【C++】类的静态数据成员
- Objective-C类的静态数据成员
- 类中的静态数据成员
- 有关C++中的常对象,常成员函数,常数据成员,常引用的认识
- c++初级 之 类的“嵌套” 及 常成员函数和常数据成员
- 关于C++/C中防止头文件的重复包含的解决办法
- Java SE学习笔记-面向对象
- 给man pages设置颜色
- Android 对图片分配多大的内存
- 架构师牛人
- C++类中的常数据成员和静态数据成员的区别
- Android显示图片避免OOM和ANR小结
- 编程之路,给自己一个方法,一个提醒
- Installing GRUB on a Hard Disk Image File
- Exchange 2010灾备站点激活!
- hdu 2197 本原串 找规律+快速幂+映射
- UVA 11584 Partitioning by Palindromes 动态规划 入门
- hdu 4747 Mex
- android中加载图片时出现oom