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
。这背后有一些历史吗?
答案 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;
}