这在c ++中是否合法(是的,我知道它在.net中是合法的),如果是的话,它将如何/为什么会被使用?
static class foo{
public:
foo();
int doIt(int a);
};
答案 0 :(得分:26)
如果您使用的是C ++ / CLI,static
的实际语法是
ref class Foo abstract sealed /* abstract sealed = C# static */
{
};
答案 1 :(得分:22)
不,这在C ++中不受支持。 static
说明符在.NET中唯一能做的就是强制你让所有的类成员都是静态的;它只是一个帮助关键字。要用C ++编写静态类,您需要做的就是确保类中的每个成员都标记为static
。 (编辑:和非公共构造函数,因此无法实例化您的“静态”类。)
答案 2 :(得分:8)
C ++中最接近的静态类是一个只有静态成员变量的类。这被称为monostate模式。这样的类意味着该类的所有实例都具有相同的状态。 monostate实例的用法语法类似于普通类(与单例类不同),实际上monostate类可以转换为常规类而不改变其任何用法。 E.g。
// Monostate class
public class Administrator
{
private:
static int _userId;
public
int UserId() { return _userId; }
}
// Initializing the monostate value
int Administrator::_userId = 42;
// Using an instance of a monostate class
void Foo()
{
Administrator admin = new Administrator();
Assert.Equals( 42, admin.UserId() ); // will always be 42
}
答案 3 :(得分:7)
C ++中文件级作用域的static
修饰符表示标记为static
的标识符仅在定义它的文件中可见。此语法在类(仅方法和变量)中不可用,但使用匿名命名空间的类可以获得类似的效果:
namespace{
class Foo{};
};
答案 4 :(得分:0)
如以下线程中所述,C ++不支持静态类。
如果您的意思是没有公共构造函数且只有静态变量的类,那么您可以阅读此主题。
答案 5 :(得分:0)
不,static
用于对象和函数。
答案 6 :(得分:-1)
一个类不能是静态的。对于其他语言的静态类,声明一个只包含静态成员的类。
类前声明的static
属性是直接构造的对象,主要用于匿名类;
static class Foo {} foo;
Foo
,此处类的名称是可选的。