C++ 调用c++;没有类实例的类方法?

C++ 调用c++;没有类实例的类方法?,c++,C++,是否可以在不首先创建类实例的情况下调用c++类方法 假设我们有以下代码: // just an example #include <iostream> using namespace std; class MyClass { public: MyClass(); ~MyClass(); int MyMethod(int *a, int *b); }; // just a dummy method int MyClass::

是否可以在不首先创建类实例的情况下调用
c++
类方法

假设我们有以下代码:

// just an example 
#include <iostream>
using namespace std;

class MyClass {
    public:
        MyClass();
        ~MyClass();
        int MyMethod(int *a, int *b);
};

// just a dummy method
int MyClass::MyMethod(int *a, int *b){;
    return a[0] - b[0];
}
//只是一个例子
#包括
使用名称空间std;
类MyClass{
公众:
MyClass();
~MyClass();
int-MyMethod(int*a,int*b);
};
//只是一个虚拟的方法
int-MyClass::MyMethod(int*a,int*b){;
返回a[0]-b[0];
}

还有一个例子:

#include <iostream>
using namespace std;

class MyClassAnother {
    public:
        MyClassAnother();
        ~MyClassAnother();
        int MyMethod(int *a, int *b);
};

// just a dummy method
int MyClassAnother::MyMethod(int *a, int *b){;
    return a[0] + b[0];
}
#包括
使用名称空间std;
类MyClassOther{
公众:
MyClassOther();
~myclassother();
int-MyMethod(int*a,int*b);
};
//只是一个虚拟的方法
int-myclassother::MyMethod(int*a,int*b){;
返回a[0]+b[0];
}
正如我们所看到的,在上面的例子中,两个类都没有内部变量,并且使用伪构造函数/析构函数;它们的唯一目的是公开一个公共方法,
MyMethod(…)
。我的问题是:假设文件中有100个这样的类(所有类都具有不同的类名,但具有相同的结构——一个公共方法具有相同的原型--
MyMethod(…)


是否有一种方法可以调用每个类的
MyMethod(..)
方法调用,而不首先为每个类创建类实例?

使用关键字“static”来声明方法:

static int MyMethod( int * a, int * b );
然后,您可以在没有如下实例的情况下调用该方法:

int one = 1;
int two = 2;

MyClass::MyMethod( &two, &one );

“static”方法是只使用类作为命名空间的函数,不需要实例。

您可以通过声明static来调用没有实例的类方法,但这似乎不是您想要的。您希望能够在100个不同的类上调用相同的方法


< C++ >区分两种不同的类方法有两种方法:一种是在编译时进行,一种是在运行时执行。在编译时,需要调用类名称本身作为静态方法调用的一部分,或者需要将对象实例或指针指向特定的派生类。在运行时,可以调用m。如果您已声明方法为虚拟,请注意,您需要类的对象来使用任何一个运行时方法。

如Mark Random和Greyson所述,您可以将该方法设置为静态,然后在不实例化对象的情况下调用正确的签名。但是,您可能需要三思如何编写程序以这种方式操作,而不是编写同一函数的不同版本。以下是注意事项,特别是对于大型程序:

  • 静态方法很难为编写单元测试
  • B/c由于静态方法的性质,它们始终驻留在内存中
  • 如果您的程序需要使用多线程,那么多线程将很困难

我不知道为什么没有其他人提到这一点,但是从您的评论中描述的功能来看,听起来您想要的是一个名称空间,而不是一个类。在100个不同名称的名称空间中定义100个同名的函数是非常好的。它的行为应该与您描述的完全一样,并且是名称空间背后的全部用途。

MyMethod
成为静态的怎么样?你真的需要构造函数/析构函数吗?嘿,为什么不首先使用一个自由函数?@Keith——我不需要构造函数/析构函数。但是,我确实需要将所有方法命名为
MyFunction()
--因此,为了区分不同的方法,我将它们包装在不同的类中;您是否更好地了解如何实现该功能,同时仍将它们命名为
MyFunction()
?@rjz--谢谢。似乎就是这样。现在,为了确保两个类都有另一个方法,
Helper(…)
,并且从两个
MyMethod(…)
方法中调用
Helper(…)
,每个
MyMethod(…)
都将调用自己的
Helper(…)
method,对吗?意思是,它将调用属于同一类的
Helper(…)
,对吗?@rjz--谢谢你的帮助!@Greyson--谢谢!因此,基本上,通过
静态
路径,我将能够定义100个类+
MyMethod()
方法并在没有类实例的情况下调用它们,对吗?MyClass1::MyMethod(&two,&one);MyClass2::MyMethod(&two,&one);MyClass3::MyMethod(&two,&one);我做对了吗?正确。如果这将是一个实用类,我建议将构造函数设置为私有的,这样就不会误认为这个类不是要实例化的。@Greyson--是的,我真的不需要构造函数和析构函数;但是,我确实计划将1000个这样的类封装在其中一个实用程序文件——这是一个好的实践吗?有没有更好的方法来实现这一点,同时仍然能够命名所有这些方法
MyMethod(…)
?为了判断拥有数百个单静态方法类是否是一种好的做法,我需要更多的上下文。使用相同的方法名,您试图实现什么?首先,我认为最终会有数千个,甚至数万个;其次,主要原因是不必每t初始化一个类实例ime我想调用一个
MyMethod(…)
调用;这将在一个时间敏感的应用程序中使用,该应用程序将使用100000个这样的方法——我认为如果在每次这样的调用之前需要实例化一个类,那将是一种浪费。你认为呢?我会有内存问题吗?是的,我想调用相同的方法名称--
MyMethod()
。然而,每个类都有一个不同的
MyMethod()
实现。在每次调用不同的类/实现时,声明它为静态会帮助我调用各种
MyMethod()
方法吗?@user58925,否,声明