static c
예제와 함께 C ++에서 정적의 중요성 및 사용.
스토리지 클래스에 대한 이전 주제에서 정적이라는 단어를 소개했습니다. 우리는 C ++ 프로그램에서 선언 된 정적 변수에 대해 배웠습니다. 정적 변수는 한 번만 초기화되고 프로그램 전체에서 값을 유지한다는 것을 알고 있습니다.
이 자습서에서는 정적 변수와 유사하게 정적 키워드 사용을 다음으로 확장합니다.
- 클래스의 정적 멤버 변수
- 정적 클래스 객체
- 정적 메서드 클래스
=> 여기에서 심층 C ++ 교육 자습서를 확인하십시오.
스파이를위한 최고의 앱은 무엇입니까
학습 내용 :
클래스의 정적 멤버 변수
정적 변수는 스택에 할당되지 않습니다. 다른 정적 스토리지에 할당 된 공간입니다. 이는 클래스에서 정적 변수를 선언 할 때이 변수가 해당 클래스의 모든 객체에 의해 공유된다는 것을 의미합니다.
정적 변수는 한 번만 초기화되고 클래스의 모든 개체가 공유하므로 정적 변수는 생성자에 의해 초기화되지 않습니다. 대신 정적 변수는 범위 확인 연산자 (: :)를 사용하여 한 번만 클래스 외부에서 명시 적으로 초기화되어야합니다.
첫 번째 객체가 생성 될 때 다른 초기화가없는 경우 기본 유형의 모든 정적 데이터가 0으로 초기화됩니다.
클래스의 정적 변수를 보여주는 다음 예제를 확인하십시오.
아래 코드에서 볼 수 있듯이 클래스 샘플의 멤버로 정적 변수 개수가 있습니다. 이 변수는 초기 값 = 0으로 클래스 외부에서 명시 적으로 초기화되었습니다.
그런 다음 클래스 생성자에서이 정적 변수를 증가시킵니다.
예제 프로그램을 살펴 보겠습니다.
#include #include using namespace std; class sample{ int var; static int count; public: sample(int var):var(var){ cout<<'Count = '< 산출:
개수 = 0
개수 = 1
개수 = 2
주요 기능에서는 세 가지 다른 개체를 만듭니다. 출력에서 정적 변수의 값은 객체 생성 사이에 유지되며 모든 객체 생성시 재설정되지 않습니다. 첫 번째 개체의 경우 개수 = 0입니다. 그런 다음 1로 증가합니다. 다음 개체의 경우 개수 = 1 등입니다.
개수가 일반 변수이면 출력은 다음과 같을 것입니다.
개수 = 0
개수 = 0
개수 = 0
정적 클래스 객체
클래스의 정적 멤버 변수와 마찬가지로 클래스 객체를 정적으로 선언 할 수 있습니다. 정적 클래스 개체도 한 번만 초기화되고 프로그램 전체에서 활성 상태로 유지됩니다. 객체가 사용자 정의 유형이므로 정적 클래스 객체는 생성자를 사용하여 일반 객체와 유사하게 초기화됩니다.
정적 클래스 객체를 더 잘 이해하기 위해 프로그래밍 예제를 살펴 보겠습니다.
#include using namespace std; class xyz { int i; public: xyz() { i=0; cout << 'Constructor::xyz'<이 프로그램에는 생성자와 소멸자가있는 xyz 클래스가 있습니다. 주 함수에서 변수 x = 0을 선언합니다. x가 0이면 xyz 클래스의 정적 객체를 만듭니다.
프로그램은 다음과 같은 출력을 제공합니다.
산출:
생성자 :: xyz
메인 종료
소멸자 :: xyz
일반적으로 출력은
생성자 :: xyz
소멸자 :: xyz
메인 종료
그러나 정적 개체를 만들 때이 개체는 프로그램이 끝날 때까지 범위를 가지며 개체가 범위를 벗어날 때 (if 문 끝)가 아닙니다. 이것이 객체 obj의 소멸자가 주 함수의 끝에 도달 한 후에 만 실행되는 이유입니다.
클래스의 정적 메서드
클래스에 정적 메서드를 가질 수도 있습니다. 정적 개체 및 정적 멤버 변수와 마찬가지로 정적 멤버 함수도 프로그램 실행이 끝날 때까지 범위를 갖습니다.
클래스 메서드가 static으로 선언되면 정적 멤버의 정적 변수 및 클래스의 정적 함수에만 액세스 할 수 있습니다. 클래스의 일반 멤버에 액세스 할 수 없습니다.
또한 정적 클래스 메서드에 사용할 수있는 'this'포인터가 없습니다.
객체와 도트 연산자를 사용하여 클래스의 정적 메서드에 액세스 할 수 있지만 이러한 메서드에 액세스하려면 클래스 이름과 범위 확인 연산자를 사용하는 것이 좋습니다.
다음은 클래스에서 정적 메서드를 사용하는 예입니다.
이 예에서는 두 개의 정적 멤버 변수 A와 B와 정적 메서드 printValues를 정의했습니다. 변수 A와 B는 각각 값 10과 20으로 초기화됩니다. 정적 메서드 printValues에서 A와 B의 값은 각각 post Increment와 pre Increment를 거칩니다. 그 후 값이 인쇄됩니다.
메인 메소드에서 우리는 정적 함수를 호출하기 위해 어떤 객체도 필요하지 않기 때문에 클래스 이름을 사용하여 정적 메소드 printValues를 직접 호출합니다.
#include using namespace std; class Sample { static int A; static int B; public: static void printValues(){ A++; ++B; cout <<'Value of A: ' << A << endl; cout <<'Value of B: ' << B << endl; } }; int Sample :: A =10; int Sample :: B =20; int main(){ Sample::printValues(); return 0; }
산출:
A의 값 : 11
B 값 : 21
동일한 출력의 스크린 샷이 아래에 나와 있습니다.
따라서 출력에서 두 정적 변수의 값이 수행 된 작업에 따라 변경되는 것을 볼 수 있습니다.
정적 함수의 목적
이 튜토리얼에서 static 키워드의 다양한 사용을 보았지만, 정적 함수의 목적이 무엇인지에 대한 질문이 남아 있습니다.
정적 함수의 목적은 다음과 같이 요약 할 수 있습니다.
- 함수가 호출 및 작업을 위해 객체에 의존하지 않을 때 정적 함수를 사용합니다.
- 정적 함수를 사용하는 또 다른 목적은 사용을 제한하는 것입니다. 전역 함수와 달리 정적 함수에 대한 액세스는 해당 함수가있는 파일로 제한됩니다. 따라서 함수에 대한 액세스를 제한하기 위해 정적 함수를 정적으로 만듭니다.
- 위의 두 가지 이유 외에도 클래스 멤버를 참조하지 않는 함수를 실행하기 위해 클래스의 객체를 생성하고 싶지 않을 때 정적 함수를 사용합니다.
결론
이 주제를 마무리하기 위해 C ++의 static 키워드를 다양한 방법으로 사용하여 변수, 멤버 변수, 클래스 객체, 메서드 등을 선언 할 수 있다고 말할 수 있습니다.
정적 멤버 함수와 변수는 객체로 액세스 할 필요가 없으며 클래스 이름을 사용하여 직접 액세스 할 수 있습니다. 또한 정적 엔터티의 범위는 프로그램 실행 내내 유지됩니다. 따라서 정적 키워드를 사용하여 특정 엔티티의 액세스를 제어 할 수도 있습니다.
다가오는 자습서에서는 C ++의 다른 여러 OOP 항목에 대해 자세히 알아 봅니다.
=> 여기에서 C ++ 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.
추천 도서