-
윤성우 열혈 C++ 프로그래밍 6장) friend와 static 그리고 constPROGRAMMING/C++ 2024. 1. 3. 20:28
올해 알고리즘과 자료구조, C++언어를 완벽하게 복기하는게 목표다! 과거의 나야 딱 기다려!
(혹시 저작권에 문제가 있다면 수정하겠습니다!! 개인적인 공부용으로 정리함을 알려드립니당)
https://product.kyobobook.co.kr/detail/S000001589147
const 객체
: 객체도 const 선언을 할 수 있으며, 이 객체를 대상으로는 const 맴버함수만 호출이 가능하다.
const와 함수 오버로딩
: const의 선언유무도 함수 오버로딩의 조건에 해당이 된다.
friend
: A 클래스가 B 클래스를 대상으로 friend 선언을 하면 B 클래스는 A 클래스의 private 맴버에 직접 접근이 가능하다.
(반대 상황이 성립하려면 B클래스가 A 클래스를 대상으로 friend 선언을 해야한다.)
- friend선언은 클래스 내 어디든 위치할 수 있다.
- friend선언은 전역함수와 클래스의 맴버함수를 대상으로도 가능하다.
🚨 friend는 정보은닉을 무너뜨리기 때문에 가급적 사용하지 않는게 좋다.
(연산자 오버로딩에서 friend의 유용함을 확인할 수 있다.)
static
- 전역변수에서의 static : 선언된 파일 내에서만 참조를 허용
- 함수 내에서의 static : 한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않음
static 맴버변수(클래스 변수)
: 클래스당 하나씩만 생성되며 객체 생성 유무와 별개로 메모리 공간에 딱 하나만 할당되어서 공유되는 변수
⭐ 객체 내에 존재하는게 아니다!! 맴버변수처럼 접근할 수 있는 권한만 줬을 뿐이다!
- 전역변수와 생성 및 소멸 시점이 동일하다.
- 초기화는 클래스 외부에서 해야한다.(아니면 계속 초기화 됨!)
class Sosimple { public: static int num; /// }; int Sosimple::num = 0; // 클래스 외부에서 초기화
- public static 맴버변수를 부를 때는 클래스의 이름을 이용해 접근하는 것이 좋다.
Sosimple sim; cout << Sosimple::num; (추천) cout << sim.num; (비추천)
static 맴버함수
- 선언된 클래스의 모든 객체가 공유
- public으로 선언이 되면, 클래스의 이름을 이용해서 호출이 가능
- 객체의 맴버로 존재하는 것이 아니다. → static 맴버함수로는 맴버변수에 접근할 수 없다.
→ static맴버함수 내에서는 static맴버변수와 static 맴버함수만 호출이 가능하다.
const static 맴버함수
- const 멤버변수의 초기화는 이니셜라이져를 통해서만 가능하지만, const static으로 선언된 맴버변수는 선언과 동시에 초기화가 가능하다. 굳이 객체를 생성할 필요 없이 접근 가능하다.
class Sosimple{ public: const static int pi = 3.14; } cout << Sosimple::pi;
mutable
: const 함수 내에서의 값의 변경을 예외적으로 허용
🚨 mutable도 가급적 사용하지 않는게 좋다.
'PROGRAMMING > C++' 카테고리의 다른 글