3

例如,

矩阵.h

namespace Matrix
{
    class mat
    {
    public:
        mat(int row, int col);
        const mat &operator=(const mat &rhs);
    }
}

矩阵.cpp

Matrix::mat::mat(int row, int col)
{  // implementation here  }

const Matrix::mat &Matrix::mat::operator=(const mat &rhs)
{  // implementation here  }

上面的代码将毫无问题地编译。问题是,我应该把命名空间标识符放在参数前面,比如const mat operator=(const Matrix::mat &rhs);and
const Matrix::mat Matrix::mat::operator=(const Matrix::mat &rhs)吗?执行此操作的常规方法是什么,为什么它会在不添加标识符的情况下进行编译?

4

2 回答 2

2

只需在命名空间中定义您的代码

矩阵.cpp

namespace Matrix {

  mat::mat(int row, int col)
  {  // implementation here  }

  mat& mat::operator=(const mat &rhs)
  {  // implementation here  }

} //namespace Matrix
于 2013-10-27T01:54:58.730 回答
1

这纯粹是一种完全个人的风格偏好。在过去的十年中,我与许多喜欢这种风格的人一起工作。不过,大多数人似乎更喜欢其他方式。

如果您正在处理使用此约定的项目,那么请保持一致并执行相同的操作。否则做你喜欢的。但请记住,使用问题中描述的风格可能无法帮助您找到具有相同风格偏好的人。

人们通常做的是将定义放在与声明相同的命名空间中,正如@billz 在他的示例中所展示的那样。另一种方法是在提供类定义之前放在文件using namespace Matrix;的顶部Matrix.cpp(而不是在标题中),尽管这样做的方式不太明确和时髦,恕我直言。

希望这可以帮助。祝你好运!:)

于 2013-10-27T02:01:08.577 回答