C++의 정적 함수
이 기사에서는 C++에서 클래스의 정적 멤버 함수를 사용하는 방법을 보여줍니다.
static
멤버 함수를 사용하여 private
static
멤버 변수에 액세스
static
키워드는 C++에서 특정 인스턴스가 아닌 클래스 자체와 연결된 클래스의 멤버를 선언하는 데 사용할 수 있습니다.
정적 멤버 변수는 클래스 본문 내에서 선언되지만 constexpr
규정, const
규정 정수 유형 또는 const
규정 enum
이 아닌 한 동시에 초기화할 수 없습니다. 따라서 다른 전역 변수와 마찬가지로 클래스 정의 외부에서 const가 아닌 정적 멤버를 초기화해야 합니다.
주어진 정적 멤버에 private
지정자가 있더라도 BankAccount::rate
가 다음 코드 조각에서 초기화되므로 클래스 범위 확인 연산자를 사용하여 전역 범위에서 액세스할 수 있습니다. rate
멤버는 프로그램 시작 시 초기화되면 프로그램이 종료될 때까지 유지됩니다. 사용자가 명시적으로 정적 멤버를 초기화하지 않으면 컴파일러는 기본 이니셜라이저를 사용합니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
class BankAccount {
private:
// static double rate = 2.2; / Error
static double rate;
double amount;
public:
explicit BankAccount(double n) : amount(n) {}
static double getRate() { return rate; }
static void setNewRate(double n) { rate = n; }
};
double BankAccount::rate = 2.2;
int main() {
BankAccount m1(2390.32);
BankAccount m2(1210.51);
return EXIT_SUCCESS;
}
BankAccount::rate
는 모든 BankAccount
객체에 저장되지 않습니다. BankAccount
클래스와 연결된 rate
값은 하나만 있으며 결과적으로 모든 인스턴스는 주어진 순간에 동일한 값에 액세스합니다. 이 동작은 클래스 디자인에서 매우 유용하지만 이 경우 정적
멤버 함수에 중점을 둡니다.
후자는 일반적으로 멤버 액세스 제어 지정자가 클래스의 사용자가 상호 작용하기를 원할 때 적용되므로 정적 멤버 변수에 액세스하는 데 사용됩니다.
즉, private
지정자가 있는 rate
값을 검색하려면 해당 public
멤버 함수가 있어야 합니다. 또한 클래스 자체에 대한 값이 하나만 있기 때문에 개별 호출 개체로 이러한 멤버에 액세스하고 싶지 않습니다.
따라서 정적 멤버 함수인 getRate
라는 함수를 구현하고 rate
값을 반환합니다. 그런 다음 BankAccount
유형의 개체를 구성하지 않고 main
함수에서 직접 rate
값에 액세스할 수 있습니다. 정적 멤버 함수에는 사용할 수 있는 this
암시적 포인터가 없으며 클래스의 비정적 멤버에 액세스/수정할 수 없습니다.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
class BankAccount {
private:
static double rate;
double amount;
public:
explicit BankAccount(double n) : amount(n) {}
static double getRate() { return rate; }
static void setNewRate(double n) { rate = n; }
};
double BankAccount::rate = 2.2;
int main() {
cout << BankAccount::getRate() << endl;
BankAccount::setNewRate(2.4);
cout << BankAccount::getRate() << endl;
return EXIT_SUCCESS;
}
출력:
2.2
2.4
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook