C++开发初级


907 浏览 5 years, 4 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;