이 합법적 인 C++ (예, 나는 그것이 합법적 인 것을 알고 있습니다.) 그렇다면, 어떻게/왜 사용됩니까?클래스를 C++에서 정적으로 선언 할 수 있습니까?
static class foo{
public:
foo();
int doIt(int a);
};
이 합법적 인 C++ (예, 나는 그것이 합법적 인 것을 알고 있습니다.) 그렇다면, 어떻게/왜 사용됩니까?클래스를 C++에서 정적으로 선언 할 수 있습니까?
static class foo{
public:
foo();
int doIt(int a);
};
아니요, 이것은 C++에서 지원되지 않습니다. .NET에서 static
지정자가 수행하는 유일한 작업은 모든 클래스 멤버를 정적으로 만드는 것입니다. 그것은 단지 도우미 키워드 일뿐입니다. C++에서 정적 클래스를 작성하려면 클래스의 각 멤버가 static
으로 표시되어 있는지 확인해야합니다. (편집 : 비공개 생성자이므로 "정적"클래스를 인스턴스화 할 수 없습니다.)
또한 비공개 (이상적으로는 개인) 생성자가 필요합니다. –
아, 네. 내가 뭔가 잊고 있다는 걸 알았어! –
일반적으로 이것은 네임 스페이스에 있습니다. – GManNickG
C++에서는 정적 클래스를 지원하지 않습니다.
공용 생성자가없고 정적 변수 만있는 클래스를 의미하는 경우이 스레드를 읽을 수 있습니다.
아니, static
개체 및 기능입니다.
C++에서 정적 클래스와 가장 유사한 것은 정적 멤버 변수 만 가진 클래스입니다. 이를 monostate 패턴이라고합니다. 이러한 클래스는이 클래스의 모든 인스턴스가 동일한 상태를 갖게됨을 의미합니다. 모노 스테이트 인스턴스의 사용법 구문은 싱글 톤 클래스와 달리 일반 클래스와 유사하며 실제로 모노 스테이트 클래스는 사용법을 변경하지 않고 일반 클래스로 변환 될 수 있습니다. 예 :
// 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
}
는 C++/CLI를 사용하는 경우, static
실제 구문 ++ C의 파일 레벨 범위에서
ref class Foo abstract sealed /* abstract sealed = C# static */
{
};
+1 ** 정답 **입니다. 클래스를 이와 같이 표시하면 C#에서 클래스를 'var f = Foo();'로 인스턴스화하면 예상되는 오류가 발생합니다 * "정적 유형 Foo의 변수를 선언 할 수 없습니다"* 및 * " 정적 클래스 Foo "*, C#은 (C#)"정적 "클래스라고 간주 함을 나타냅니다. –
static
개질제 static
표시된 식별자가에서만 표시 한 것을 나타낸다 정의 된 파일. 이 구문은 클래스 (오직 방법 및 변수)에 사용할 수 없지만 동일한 효과 익명 네임 스페이스를 사용하여 클래스를 얻을 수있다 :
namespace{
class Foo{};
};
클래스는 정적 일 수 없다. 다른 언어의 정적 클래스의 경우 정적 멤버 만 사용하는 클래스를 선언합니다.
클래스 선언 전의 static
은 즉시 생성 된 개체를 의미하며 대부분 익명 클래스와 함께 유용합니다.
static class Foo {} foo;
Foo
"그렇습니다 .net에서 합법적 인 것입니다."사실이 아닙니다. C++/CLI에서 정적 클래스는 '정적 클래스 MyClass'가 아니라'ref class MyClass abstract sealed'로 선언되었습니다 (C# 구문). –