可以在c ++中将类声明为static吗?

时间:2009-10-28 03:37:53

标签: c++ static

这在c ++中是否合法(是的,我知道它在.net中是合法的),如果是的话,它将如何/为什么会被使用?

static class foo{  
    public:  
        foo();  
        int doIt(int a);   
};

7 个答案:

答案 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 ++不支持静态类。

如果您的意思是没有公共构造函数且只有静态变量的类,那么您可以阅读此主题。

http://www.daniweb.com/forums/thread122285.html#

答案 5 :(得分:0)

不,static用于对象和函数。

答案 6 :(得分:-1)

一个类不能是静态的。对于其他语言的静态类,声明一个只包含静态成员的类。

类前声明的static属性是直接构造的对象,主要用于匿名类;

static class Foo {} foo;

Foo,此处类的名称是可选的。