如何禁止将对象用于静态成员函数

时间:2013-05-02 12:18:40

标签: c++ static

我有一个简单的类和一个静态成员函数:

class Matrix
{
public: 
    static Matrix returnSomething ( Matrix &m )
    {
        return Matrix(2,2);
    }
};

主要功能:

int main()
{
    Matrix matrix(2,2);                           // some matrix
    Matrix m = Matrix::returnSomething ( matrix ) // I should use it that way
    m.print() // it shows the matrix       

    // but I can use it too that way //

    Matrix m;
    m.returnSomething ( matrix )                  // how to make this not allowed??
    m.print() // but here the matrix is NULL, wont show anything 
}

怎么做?

编辑:

我添加了一些显示问题的打印功能

3 个答案:

答案 0 :(得分:3)

它不应该有所作为。但是,您可以使用命名空间而不是静态函数

namespace MatrixUtils
{
  Matrix returnSomething ( Matrix &m )
  {
     return Matrix(2,2);
  }
}

答案 1 :(得分:3)

你混淆了两个问题。返回值“消失”,因为您没有将其分配给任何东西 - 这与您调用函数的方式无关。

换句话说,这些都有效:

Matrix matrix(2, 2);
Matrix m = Matrix::returnSomething(matrix);
Matrix m2 = m.returnSomething(martix);

虽然这些都会使返回值“消失:”

Matrix matrix(2, 2);
Matrix::returnSomething(matrix);
matrix.returnSomething(martix);

答案 2 :(得分:1)

为什么不使用帮助类?

class MatrixHelper
{
public: 
    static Matrix returnSomething ( Matrix &m )
    {
        return Matrix(2,2);
    }
};

然后调用将是:

MatrixHelper::returnSomething ( matrix )