C++开发初级
1087 浏览 5 years, 10 months
5.2 常量数据成员
版权声明: 转载请注明出处 http://www.codingsoho.com/常量数据成员
类中的数据成员可以声明为const,意味着在创建并初始化之后数据成员的值不能再改变。在对象层次上常量通常没有意义,因此常量数据成员通常也是静态的。如果某个常量只适用于类,应该使用静态常量数据成员而不是全局常量。
常见const类型
- const char* str; 指向字符串常量指针
- char const* str; 同上
- char* const str; 常指针,地址不能变
- const char* const* const * str; 指向字符串常量的三级常指针
- const char* const str; 指向常量的常指针 (地址和内容都不能改变)
例如,您可能想指定电子表格的最大高度以及宽度。如果用户想要创建的电子表格高度或者宽度大于最大值,就改用最大值。可将最大高度以及宽度设置为Spreadsheet类的static const成员:
class Spreadsheet
{
public:
// Doesn't work in Microsoft Visual Studio 6
static const int kMaxHeight = 100;
static const int kMaxWidth = 100;
};
代码取自 SpreadsheetDataMembers\Spreadsheet.h
可在构造函数中使用这些新的常量,如下面的代码片段所示(注意三元运算符的使用):
Spreadsheet::Spreadsheet(int inWidth, int inHeight)
: mWidth(inWidth < kMaxWidth ? inWidth : kMaxWidth),
mHeight(inHeight < kMaxHeight ? inHeight : kMaxHeight)
{
mId = sCounter++;
mCells = new SpreadsheetCell* [mWidth];
for (int i = 0; i < mWidth; i++) {
mCells[i] = new SpreadsheetCell[mHeight];
}
}
代码取自 SpreadsheetDataMembers\Spreadsheet.cpp
当高度或者宽度超出最大值时,除了自动使用最大高度或者宽度之外,也可以抛出异常。然而,当在构造函数中抛出异常时不会调用析构函数。因此需要认真对待。后面将对此详细解释。
kMaxHeight以及kMaxWidth是公有的,因此可在程序的任何位置访问它们,就像它们是全局变量一样,只是语法略有不同:您必须用作用域解析运算符::说明相应变量是Spreadsheet类的一部分:
cout << "Maximum height is : " << Spreadsheet::kMaxHeight << endl;