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);
};
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);
};
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.)
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.
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. 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
}
If you're using C++/CLI, the syntax for static
is
ref class Foo abstract sealed
{
};
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{};
};