목록Programming (115)
Nagie's DevStory
C에서의 static을 한번 떠올려 보자 static 키워드를 사용하면 함수 내부에서 선언된 변수는 정적 지역 변수로 정의되고 한 번만 초기화되며 함수가 호출될 때 매번 초기화되지 않고 값이 유지된다고 했고 정적 전역 변수 역시 선언한 해당 파일에서만 접근 가능하다고 우린 공부했을 것이다. 하지만 C++에선 이 static의 의미가 다르다. 클래스 내부에서 static 키워드를 사용해 정의된 멤버 변수는 해당 클래스의 모든 객체가 공유하며 사용하는 객체 전용의 전역변수 역할을 하게 된다. 아래는 정적 멤버 변수의 사용 예시다. #include class MyClass { public: static int sharedValue; }; int MyClass::sharedValue = 0; int main()..
friend 함수는 C++에서 사용되는 조금 특별한 함수다. 클래스의 멤버 함수가 아닌데 해당 클래스의 private 멤버에게 접근할 수 있도록 권한을 부여하는 함수며 이는 곧 클래스의 캡슐화(정보은닉)를 깨버리는 결과를 가져온다. 가능하면 안 쓰는 게 베스트지만 그래도 사용법은 알고 있어야지 특정 상황에서 선택의 여지가 없을 때 문제를 해결할 수 있을 거 같아 사용 예시를 올린다. #include class MyClass { private: int privateVar; public: MyClass(int value) : privateVar(value) {} // 클래스 외부에서 privateVar에 접근할 수 있도록 friend 함수 정의 friend void DisplayPrivateVar(const..
this 포인터란 클래스 내부에서 사용되는 포인터인데 자기 자신을 가리키는 용도로 사용되는 조금 특이한 포인터다. 자기 자신을 가리키는 용도로 왜 사용해야 하는지 궁금할 수도 있는데 이는 함수 파라미터의 이름을 데이터 멤버와 중복된 이름을 사용해서 충돌을 방지하기 위해 사용하거나 이 클래스 내부에 있는 멤버라고 명시를 하고 싶을 때 사용된다. 다음은 this 포인터의 사용예시다. class User { private: std::string name; public : User(std::string name) { this->name = name; //this 포인터 사용으로 인해 모호함이 사라졌다. } }; 또한 this 포인터는 비정적 멤버에만 사용할 수 있으며 정적 멤버에 this 포인터를 사용하게 된다..
소멸자는 객체가 소멸하는 시점에 호출되는 특별한 멤버 함수라고 말했다. 생성자와는 다르게 오버 로딩이 불가능하며 파라미터도 가지지 못한다. 소멸자는 클래스의 이름 앞에 '~'가 붙은 형태의 이름을 가지며 사용 예시는 다음과 같다. class User { private: int* nUserNum; std::string strUserName; public : User(int num = 0, std::string name = "Unknown") { this->nUserNum = new int(0); this->strUserName = name; } ~User() { //소멸자 if (this->nUserNum != nullptr) { delete this->nUserNum; this->nUserNum = nu..
생성자는 객체가 생성될 때 자동으로 호출되는 특별한 멤버 함수라고 말했다. 생성자의 주요 역할은 객체의 초기화, 데이터 멤버의 설정, 동적 메모리 할당 등을 수행하며 생성자는 클래스의 이름과 동일하며 반환 유형을 가지지 않는다. 다음은 생성자의 사용 예시이다. class User { private: int nUserNum; std::string strUserName; public : User() { this->nUserNum = 0; this->strUserName = "Unknown"; } User(int num, std::string name) { this->nUserNum = num; this->strUserName = name; } }; 다만 이런 식으로 생성자를 오버 로딩을 하게 된다면 소스 코..