모든 내용은 [윤성우 저, "열혈 C++ 프로그래밍", 오렌지미디어] 를 기반으로 제 나름대로 이해하여 정리한 것입니다. 다소 부정확한 내용이 있을수도 있으니 이를 유념하고 봐주세요!
# 변수를 상수화하듯, 객체도 상수화가 가능하다.
이는 객체의 데이터 변경을 허용하지 않겠다는 의미이므로 해당 객체는 const 함수만 호출이 가능하다.
# 멤버변수의 값을 수정하지 않는 멤버함수의 경우 const 선언을 하는 습관을 들이자.
# const 선언 또한 함수 오버로딩 조건에 해당된다.
1) 매개변수의 수
2) 매개변수의 자료형
3) const 선언 유무
* 반환형은 해당되지 않으니 주의하자.
# const 참조자로 객체를 참조하는 경우에도, 이 참조자로 함수를 호출시 const 함수만 호출이 가능하다.
# 클래스 내에서 friend 선언을 하면, freind 선언의 대상인 클래스(friend가 된 클래스)의 객체는
friend 선언을 한 클래스의 private 멤버에 직접접근이 가능하다.
- friend 선언은 어디서든 가능하다.(private이든 public이든)
e.g.
class A; // 클래스 선언(A가 클래스의 이름임을 알림)
class B
{
private:
...
friend class A; // 클래스 A가 B의 친구임을 선언 => 클래스 B는 클래스 A의 private 멤버에 접근이 가능
public:
...
};
- 연산자 오버로딩의 경우를 제외하고는 friend 선언은 가급적 사용하지 말자.(정보은닉이 훼손될 수 있음)
- friend 대신 Get(), Set() 멤버함수를 정의하여 사용하는 것도 가능하다.
# static
1) 전역변수에 선언된 static : 선언된 파일 내에서만 참조를 허용
2) 함수 내에 선언된 static : 한번만 초기화(전역변수와 마찬가지로 따로 초기화하지 않으면 0으로 초기화)되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않음
3) static 멤버변수(클래스변수) : 클래스당 하나씩만 할당 및 생성됨.
객체를 생성하건 생성하지 않건, 메모리 공간에 딱 하나만 할당 및 생성되어 공유됨.
객체는 이 변수에 접근권한만 있을 뿐, 객체 내에 이 변수가 존재하는 것이 아님.
즉, 이 변수는 멤버변수가 아님.
- 3)의 초기화 방법 e.g. 자료형 클래스명::클래스변수명=0;
- 클래스변수는 멤버함수를 통해서 말고도,
public으로 선언되었을 때 클래스명이나 객체명으로 접근할 수 있으나,
객체명으로 접근할 경우 멤버변수인거 같은 오해를 일으킬 수 있으니 주의
4) static 멤버함수 - 그 특성이 static 멤버변수와 동일
1) 선언된 클래스의 모든 객체가 공유
2) public으로 선언되면 클래스의 이름을 이용해 호출이 가능
3) 객체의 멤버로 존재하는 것이 아님
=> static 멤버함수 내에서는 static 멤버변수와 static 멤버함수만 호출이 가능
- 클래스 내에 선언된 const 멤버변수의 초기화는 이니셜라이저를 통해서만 초기화할 수 있으나,
const static 멤버변수(const 클래스변수)는 선언과 동시에 초기화가 가능
# mutual - const 함수 내에서의 값의 변경을 예외적으로 허용한다.(가급적 쓰지말자.)
[출처] : 윤성우 저, "열혈 C++ 프로그래밍", 오렌지미디어
'Programming > 열혈 C++ 프로그래밍(저자 윤성우)' 카테고리의 다른 글
Ch 10. 연산자 오버로딩 1 (0) | 2020.08.17 |
---|---|
Ch 07-09. 상속의 이해, 상속의 다형성, 가상(Virtual)의 원리와 다중상속 (0) | 2020.08.17 |
Ch 05. 복사 생성자(Copy Constructor) (0) | 2020.08.17 |
Ch 04. 클래스의 완성 (0) | 2020.08.17 |
Ch 03. 클래스의 기본 (0) | 2020.08.17 |