const SoSimple sim(20);
객체의 상수화 : 이 객체를 대상으로는 const 멤버 함수만 호출 가능
const의 유무도 함수 오버로딩의 조건에 해당이 됨
void SimpleFunc() {...}
void SimpleFunc() const {...}
매개변수로 const 참조자로 받으면, const 멤버 함수를 호출
class Boy
{
private:
int height;
friend class Girl; // Girl 클래스에서 Boy 클래스 멤버 변수 접근 가능
public:
Boy(int len) : height(len)
{ }
....
}
friend class Girl;
의미
정보은닉을 무너뜨리기 때문에 되도록 사용하지 않고, 거의 연산자 오버로딩에서 사용됨
함수의 friend 선언 : 전역 함수와 클래스의 멤버함수를 대상으로 friend 선언 가능
static의 개념
전역변수 사용 시 필요 없는 접근이 있을 수 있으므로 → 클래스 내에 static 멤버로 선언
static 멤버변수(클래스 변수)
일반 멤버변수와 달리 클래스당 하나씩만 생성
→ 메모리 공간에 딱 하나만 할당 되어 공유됨,
객체 안에 존재하는 것이 아닌, 객체에게 멤버변수처럼 접근할 수 있는 권한을 준 것
static 변수를 생성자에서 초기화하면 안 되는 이유 :
객체가 생성될 때 생성되는 변수가 아니라, 이미 메모리 공간에 할당이 이뤄진 변수이기 때문
int SoSimple::simObjCnt=0;
과 같이 초기화
→ SoSimple 클래스의 static 멤버변수 simObjCnt가 메모리 공간에 저장될 때 0으로 초기화하라는 뜻
static 멤버변수의 또 다른 접근방법
static 멤버가 private 선언 : 해당 클래스의 객체들만 접근 가능
static 멤버가 public 선언 : 클래스의 이름, 객체의 이름을 통해 어디서든 접근 가능
static 멤버함수
클래스 내에 선언된 const 멤버변수(상수)의 초기화는 이니셜라이저를 통해야만 가능.
but, const static으로 선언되는 멤버변수(상수)는 선언과 동시에 초기화 가능
const static int RUSSIA = 1707540;
const static 멤버변수는, 클래스가 정의될 때 지정된 값이 유지되는 상수
const 함수 내에서 값의 변경을 예외적으로 허용