是否可以在不先创建类实例的情况下调用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];
}
这是另一个例子:
#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];
}
正如我们所看到的,在上面的例子中,两个类都没有内部变量,并使用虚拟构造函数/析构函数; 他们唯一的目的是揭露一种公共方法,MyMethod(..)
。这是我的问题:假设文件中有100个这样的类(所有类都有不同的类名,但结构相同 - 一个公共方法具有相同的原型 - MyMethod(..)
。
有没有办法调用每个类的MyMethod(..)
方法调用而不先为每个类创建一个类实例?
答案 0 :(得分:39)
使用关键字'static'来声明方法:
static int MyMethod( int * a, int * b );
然后你可以在没有像这样的实例的情况下调用方法:
int one = 1;
int two = 2;
MyClass::MyMethod( &two, &one );
'static'方法是仅将类用作命名空间的函数,不需要实例。
答案 1 :(得分:3)
您可以通过声明static
来调用没有实例的类方法,但这似乎不是您想要的。您希望能够在100个不同的类上调用相同的方法。
C ++有两种方法可以区分不同的类方法。一种是在编译时执行,一种是在运行时执行此操作。在编译时,您需要调用类名本身作为静态方法调用的一部分,或者您需要将对象实例或指针指向特定的派生类。在运行时,如果已将方法声明为virtual,则可以以多态方式调用方法。请注意,您需要类的对象使用任一运行时方法。
答案 2 :(得分:1)
正如Mark Random和Greyson所提到的,您可以将该方法设为静态,然后在不实例化对象的情况下调用正确的签名。但是,您可能需要考虑以这种方式编写函数,而不是编写相同函数的不同版本。以下是注意事项,特别是对于大型程序:
答案 3 :(得分:0)
我不知道为什么没有其他人提到这一点,但从您评论中描述的功能来看,听起来您想要的是命名空间,而不是类。您可以在 100 个不同命名的命名空间中定义 100 个同名的函数。它的行为应该与您所描述的完全一样,并且是命名空间背后的全部目的。