【发布时间】:2014-03-13 12:14:24
【问题描述】:
是否可以创建一个不需要实例化的类?换句话说,是否可以在没有它的实例的情况下使用该类的函数?
【问题讨论】:
是否可以创建一个不需要实例化的类?换句话说,是否可以在没有它的实例的情况下使用该类的函数?
【问题讨论】:
您可以使用静态函数,它们绑定到类,而不是实例。
class Test{
static void
doSomething()
{
std::cout << "something" << std::endl;
}
}
int
main(int argc, char** argv)
{
Test::doSomething(); //prints "something" without instance of Test
}
否则你可以构建一个单例,在这种情况下,类本身将保存实例,但我不确定这是否是你想知道的......
【讨论】:
doSomething 的函数。您甚至可以将其放在名为 Test 的命名空间中。不过,它通常对模板很有用,因为类可以是模板参数,但命名空间不能。因此,您可以将函数组合到类中,然后告诉模板使用该类。
您可以将所有成员函数和变量设为静态,但随后人们开始怀疑为什么它应该是一个类,而不是命名空间。
但有一个很好的理由:您可能想要使用这样的类模板。 C++14 将添加变量模板,这使得在没有类的情况下也能做到这一点。一个类也允许访问控制;您可以使用匿名命名空间为非模板案例伪造这个,但类可能更自然。
【讨论】:
可以在不创建类实例的情况下调用静态方法。
class CMyClass
{
public:
static void Method1()
{
printf("Method1\n");
}
};
CMyClass::Method1(); // Prints "Method1".
【讨论】:
是的,这是可能的。如果你想在没有实例的情况下使用类,你必须使用静态函数。
【讨论】:
您也可以使用静态方法创建此类的私有构造函数,以防止创建任何实例
【讨论】:
为此,您应该使用static 修饰符。请参阅此处的文档:http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
【讨论】:
static修饰符。