范围解析运算符语义

时间:2014-08-12 13:48:50

标签: c++ class scope

1)在我们还可以内联定义时,范围解析运算符在以下情况下的用途是什么?

class Box
{
   public:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
      double getVolume(void);// Returns box volume
};

double Box::getVolume(void)
{
    return length * breadth * height;
}

2) 此外,行double Box::getVolume(void)的语义令人困惑。为什么不能这样:double getVolume(void)::Box。这背后有一些历史吗?

1 个答案:

答案 0 :(得分:3)

  

1)在我们还可以内联定义时,范围解析运算符在以下情况下的用途是什么?

在您的示例中,在类中定义方法时不需要范围解析运算符:

class Box
{
   public:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
      double getVolume(void)// Returns box volume
      {
         return length * breadth * height;
      }
};

但是,当在类之外定义函数时,程序员需要一种方法将函数与给定的类相关联。此方法需要将类方法与独立功能区分开来。因此范围解析运算符。

  

2)此外,行double Box :: getVolume(void)的语义令人困惑。为什么不能这样:double getVolume(void):: Box。这背后有一些历史吗?

实际上,当您考虑独立函数的声明语法时,语法不会混淆:

return_type function_name(function_parameters);  

包含的命名空间或类与函数名称相关联,因此语法为:

return type class_name::function_name(function_parameters);  

如果您以不同方式安排作品,定义和声明可能会更加混乱:

double
Box ::
getVolume(void)
{
  return height * length * depth;
}