static的整理总结已经在static总结中写过,没看过的可以先去看一下。
这里主要针对static和const在类中定义和调用的时候区别进行总结
代码如下,已加上注释:
#include<bits/stdc++.h>
using namespace std;
class testClass{
public:
static int _datai;//不能在类内初始化
const int _dataj=2; //可以在类中声明常量成员 必须初始化 (c++11实现,之前不能进行初始化)
enum{_datak=3}; //(c++11之前可以用枚举类型实现常量成员)
static const int _datac=4;//定义静态常量成员
};
int testClass::_datai=1; //对于static成员变量只能在类外初始化
int main(){
testClass a;
testClass b;
cout<<"对象a调用常量成员:"<<a._dataj<<endl; //2
cout<<"对象a调用枚举常量:"<<a._datak<<endl;//3
cout<<"对象a调用静态常量成员:"<<a._datac<<endl;//4
cout<<"对象a调用静态成员:"<<a._datai<<endl; //1
b._datai=5;
cout<<"对象a再次调用静态成员:"<<a._datai<<endl; //5
cout<<"类名调用静态成员:"<<testClass::_datai<<endl;//1
cout<<"类名调用静态常量成员:"<<testClass::_datac<<endl;//4
}
static成员变量在类中声明后,不管是否实例化对象,都已经存在于静态存储区中,类似于在类中的全局变量,可以通过类名::成员名直接调用。
const成员常量在C++11之前都是不能直接在类中初始化的,从C++11开始就可以了,调用const成员常量只能进行读取,无法修改(只读操作),保证了类成员数据不会由于某些类函数调用后值发送改变(会报错提示)。
- 额外考点:宏定义和const区别?
宏替换发生在编译阶段之前,属于文本插入替换;const作用发生于编译过程中。
宏不检查类型;const会检查数据类型。
宏定义的数据没有分配内存空间,只是插入替换掉;const定义的变量只是值不能改变,但要分配内存空间