C++基础--类的作用域

来源:互联网 发布:派克练字钢笔推荐 知乎 编辑:程序博客网 时间:2024/05/29 13:21
 
我们已经学习了局部作用域和全局作用域,下面介绍类作用域,所有的类成员是属于类作用域的。
  类本身可被定义在三种作用域内:
  1. 全局作用域。这是所谓全局类,绝大多数的C++类是定义在该作用域中,我们在前面定义的所有类都是在全局作用域中。
  2. 在另一个类的作用域中。这是所谓嵌套类,即一个类包含在另一个类中。
  3. 在一个块的局部作用域中。这是所谓局部类,该类完全被块包含。
 例如:
  int fork (void); // 全局fork
  class Process {
   int fork (void);
   //...
  };
  成员函数fork隐藏了全局函数fork,前者能通过单目域运算符调用后者:
  int Process::fork (void)
  {
   int pid = ::fork(); // 使用全局fork
   //...
  }
  下面举一个嵌套类的例子。
例题例10-13
class Rectangle {
 public:
 Rectangle (int, int, int, int);
 //..
private:
 class Point {
  public:
   Point (int, int);
  private:
   int x, y;
 };
 Point topLeft, botRight;
};
  类Point嵌套在Rectangle类中,Point成员函数可定义为内联的,也可在全局作用域中,但后者对成员函数名需要更多的限制,例如:
  Rectangle::Point::Point (int x, int y)
  {
   //...
  }
  同样,在类域外访问嵌套类需要限制类名,例如:
  Rectangle::Point pt(1,1);
  下面我们再看一个局部类的例子:
例题例10-14
void Render (Image &image)
{
 class ColorTable {
 public:
  ColorTable(void) { /* ... */ }
  AddEntry(int r, int g, int b) { /* ... */ }
  //...
 };

 ColorTable colors;
 //...
}

  类ColorTable是在函数Render中的局部类。与嵌套类不同的是:局部类不能在其局部作用域外访问,例如:
  ColorTable ct; // 非法,没有定义ColorTable类!
  局部类必须完全定义在局部作用域内。所以,它的所有成员函数必须是内联的,这就决定了局部类的成员函数都是很简单的。

原创粉丝点击