C++ 如何禁止使用对象到静态成员函数
我有一个简单的类和一个静态成员函数:C++ 如何禁止使用对象到静态成员函数,c++,static,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::returnSome
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
}
主要功能:
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
}
怎么做
编辑:
我添加了一些打印功能,可以显示问题所在它不应该有什么区别。但是,可以使用名称空间而不是静态函数
namespace MatrixUtils
{
Matrix returnSomething ( Matrix &m )
{
return Matrix(2,2);
}
}
为什么不直接使用helper类呢
class MatrixHelper
{
public:
static Matrix returnSomething ( Matrix &m )
{
return Matrix(2,2);
}
};
那么调用将是:
MatrixHelper::returnSomething ( matrix )
你混淆了两个问题。返回值“消失”,因为您没有将其分配给任何对象-这与您调用函数的方式无关 换言之,这两种方法都将起作用:
Matrix matrix(2, 2);
Matrix m = Matrix::returnSomething(matrix);
Matrix m2 = m.returnSomething(martix);
而这两者都会使返回值“消失”:
你为什么要这样?因为当我忘了一次,我用m.returnSomething代替了Matrix::returnSomething,它不起作用了,你说它不起作用是什么意思?为什么它不起作用?完全一样。你想解决什么具体问题?也许你可以提供一些代码来说明这个问题。你的问题不是在实例上调用静态成员函数,而是在一种情况下,你将结果分配给
m
,而在另一种情况下,你没有。是的,我知道,我只是想保护它不受我自己或其他人的影响。有一次我忘了它,写了m.returnSomething(),我会花一整天的时间来寻找小号在哪里。我要问一个问题,看看这行:Matrix m2=m.returnSomething(martix)代码>。这句话是对的,但你不认为它毫无意义吗?对于其他矩阵,我应该使用m
对象,而不是Matrix m2=Matrix::returnSomething(Matrix)
?@Tom,这就是语言的工作原理。如果您真的想禁止这种情况,请将静态成员函数放在其他位置(命名空间或其他类)非常感谢。