Chap 6. friend와 static 그리고 const
6-1. Const
기존의 Const는 기본 자료형 변수들에 대해서 선언하여 상수화 하는 것이 일반적인 사용법이었다.
그런데, cpp에서는 객체에도 마찬가지로 상수화 선언을 통해서 상수 객체화할 수 있다.
이 때, 상수화된 객체는 초기화 이후에 객체 내부의 멤버 변수를 변경할 수 없고, 상수 선언된 멤버함수만 호출 가능하다.
추가로 다음과 같이 const 객체에서 접근가능할 때와 일반 객체에서 접근가능할 때를 오버로딩 처리도 가능하다.
1 2 | void func(void){} void func(void) const {} // const | cs |
6-2. friend 선언
friend 선언은 말 그대로 친구의 의미로, 특정 클래스에서 class, 함수, 전역 함수 등에 대해 friend 선언을 해줄 경우 선언받은 곳에서 선언한 클래스의 private 영역에 접근 가능하게 된다.
역은 성립하지 않는다. (선언한 곳에서 선언 받은 곳의 private에 접근은 가능하지 않다)
되도록이면 friend 선언은 정보은닉과 캡슐회를 깨기에 사용하지 않는 것이 좋다.
1 2 3 4 5 6 | class A{ friend class B; ... friend void func(void){} }; | cs |
6-3. Static 선언
Static은 기존에 전역 변수에서는 '해당 파일 내에서만 접근 가능', 지역 변수에서는 '함수 종료 후에도 프로그램 종료 전까지 메모리에 남아있음' 의 의미로 사용되었으나 클래스 내부의 멤버 변수에 static 선언을 해줄 경우에는 클래스에서 공유하는 특정 메모리에 남아있는 단 하나의 변수로써 사용이 된다. 그래서 객체를 아무리 생성해도 해당 static 멤버 변수는 단 한 개의 변수를 공유하게 되는 것이다.
static 멤버 함수도 마찬가지로 해당 클래스 내의 함수로 존재하는데, 멤버 변수에 접근이 불가능한 특정 메모리 영역에 초기화 되어있는 함수이다(객체의 멤버로 존재하는 것이 아니기 때문이다).
추가적으로, const static을 선언해주면 바로 초기화가 가능하다(여러 용도로 사용가능).
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Ex{ private: int num1; // static 멤버 변수 static int num2; public: Ex(int n) :num1(n){} // static 멤버 함수 static void adder(int n){ num2+=n; } }; | cs |
'Archived(CSE Programming) > cpp' 카테고리의 다른 글
Chap 8. 상속과 다형성 (0) | 2019.01.09 |
---|---|
Chap 7. 상속(Inheritance)의 이해 (0) | 2019.01.08 |
Chap 5. 복사 생성자(Copy Constructor) (0) | 2019.01.06 |
Chap 4. 클래스의 완성 (0) | 2019.01.05 |
Chap 3. 클래스의 기본 (0) | 2019.01.04 |