const 成员函数和数据成员的使用
1 常对象和普通对象都可以调用常成员函数。
2 常对象只能调用常成员函数。
3 常对象可以访问普通成员数据,但不能改变其值。
4 const数据成员只能在类的构造函数的初始化表中进行初始化
//sample
class CConst
{
public:
CConst();
~CConst();
const int m_cnVal;
int m_nVal2;
public:
int Add(int nA,int nB) const;
int Max(int nA,int nB);
};
CConst::CConst():m_cnVal(100){m_nVal2 = 2;};
CConst::~CConst(){};
int CConst::Add(int nA,int nB) const
{
printf("Print %d /n",nA+nB);
return nA + nB;
}
int CConst::Max(int nA,int nB)
{
printf("Max %d /n", (nA>nB)?nA:nB);
return (nA>nB)?nA:nB;
}
int main()
{
CConst obj;
const CConst ConstObj;
int nNum1 = 100;
int nNum2 = 200;
//常对象和普通对象调用常成员函数。
int nTmp = ConstObj.Add(nNum1,nNum2);
printf("常对象调用常成员函数 %d + %d = %d /n",nNum1,nNum2,nTmp);
nTmp = obj.Add(nNum1,nNum2);
printf("普通对象调用常成员函数 %d + %d = %d /n",nNum1,nNum2,nTmp);
//nTmp = ConstObj.Max(nNum1,nNum2);//错误 常对象只能调用常成员函数。
printf("常对象访问常成员 %d /n",ConstObj.m_cnVal);
printf("常对象访问普通成员 %d /n",ConstObj.m_nVal2);
printf("普通对象调用常成员 %d /n",obj.m_cnVal);
return 0;
}