1、static定义的静态变量不属于某个具体类对象,它是属于类的的,只能在类的内部声明,在类外定义;即在C++中,static静态成员变量不能在类的内部初始化;
2、C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。
【const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。】
3、要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static const。static cons变量就可以在声明时初始化。
4、常成员函数:主要适用于不改变类中成员变量,只读取的。比如GetValue之类的函数。
#pragma once
#include <iostream>
class CTestBasic
{
public:
//常成员:默认初始化
CTestBasic() :conNum(0) {
value = -1;
pValue = new int;
}
//常成员:重载初始化
CTestBasic(int num ) :conNum(num) {}
//常成员函数:又成为只读函数,不能改变成员变量的值
int getsNum() const;
int getcNum() const;
int get_scNum() const;
int getPointerValue() const;
~CTestBasic();
private:
//const成员变量不能在类定义处初始化,[ 只能通过构造函数初始化列表进行 ],并且必须有构造函数
const int conNum;
//static成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象.
static int sNum;
const static int scNum = 100;
int value;
int* pValue;
};
#include "CTestBasic.h"
//静态成员类外初始化
int CTestBasic::sNum = 1;
//函数定义也必须包含const 关键字
int CTestBasic::getsNum() const
{
return sNum;
}
int CTestBasic::getcNum() const
{
return conNum;
}
int CTestBasic::get_scNum() const
{
return scNum;
}
int CTestBasic::getPointerValue() const
{
*pValue = 200;
//pValue++; Error: pValue的值不能改变
return *pValue;
}
CTestBasic::~CTestBasic()
{
}