简体   繁体   中英

Can a class be declared static in c++?

Is this legal in c++ (yes i know it's legal in .net), and if so, how/why would it be used?

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

If you're using C++/CLI, the actual syntax for static is

ref class Foo abstract sealed /* abstract sealed = C# static */
{
};

No, this isn't supported in C++. The only thing the static specifier does in .NET is force you to make all the class members static; it's just a helper keyword. To write a static class in C++, all you need to do is make sure each member in the class is marked as static . (Edit: and a non-public constructor, so your "static" class can't be instantiated.)

The closest equivalent of a static class in C++ is a class with only static member variables. This is known as the monostate pattern. Such a class means that all instances of this class will have the same state. The usage syntax of a monostate instance is similar to a normal class (unlike a singleton class), and indeed a monostate class can be converted to a regular class without changing any of its usages. Eg

// 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 
}

The static modifier at file-level scope in C++ indicates that the identifier marked static is only visible in the file in which it is defined. This syntax is not available in on classes (only methods and variables), but a similar effect can be obtained for classes using an anonymous namespace:

namespace{
  class Foo{};
};

不, static用于对象和函数。

As is mentioned in the following thread, C++ doesn't support a static class.

If you mean a class with no public constructor and only static variables then you can read this thread.

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

A class cannot be static . For the static class in other language, declare a class with only static members.

The static before class declaration attributes the immediately constructed object, mostly useful with anonymous classes;

static class Foo {} foo;

Foo , the name of the class here, is optional.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM