const, static 정리

2023. 3. 21. 13:48개인공부/C++

생성자의 초기화 리스트(initalizer list)

예전 강의에서 만들었던 클래스와 달라진 것은 딱 하나 있는데, 바로 생성자에서 무언가 특이한 것을 도입했다는 것이다.   {} 이전에 초기화 리스트가 있으며, 생성자 호출과 동시에 멤벼 션수들을 초기화해주게 됩니다. 만약에 멤버변수와 생성자 인자의 이름이 같아도 정상적으로 초기화해준다. 이것은 바깥쪽은 무조건 멤버변수를 지칭하고 괄호안은 인자로 받은 변수를 지칭하기 때문이다. 그렇다면, 초기화 리스를 사용하는 이유는 ?

초기화 리스를 사용한 버전의 경우 생성과 초기화를 동시에 하게 된다. 반면에 초기화 리스트를 사용하지 않는다면 생성을 먼저 하고 그 다음에 대입을 수행하게 됩니다. 이러한 초기화 리스트는 '생성과 동시에 초기화 되어야 하는 것들' 레퍼런스와 상수에서 필요하다. 상수와 레퍼런스들은 모두 생성과 동시에 초기화 되어야한다.

static 멤버 변수

Dog 클래스로 생성된 dog 인스턴스의 총 갯수를 저장하는 방법으로 static 을 이용한다. 전역 변수로 만들면 프로젝트의 크기가 커질수록 프로그래머의 실수로 인해 서로 겹처서 오류가 날 가능성이 다분하기에 반드시 필요한 경우가 아니면 사용하지 않는다. 마치 전역 변수 같지만 클래스 하나에만 종속되는 변수인 것인데, 바로 static 멤버 변수이다. 어떤 클래스이 static 멤버 변수의 경우, 멤버 변수들 처럼, 객체가 소멸될 떄 소멸되는 것이 아닌, 프로그램이 종료될 떄 소멸되는 것이다.

또한, 이 static 멤버 변수의 경우, 클래스의 모든 객체들이 공유하는 변수로써 각 객체 별로 따로 존재하는 멤버 변수들과 달리 모든 객체들이 하니의 static 멤버 변수를 사용하게 된다

모든 전역 및 static 변수들은 정의와 동시에 값이 자동으로 0으로 초기화 되기 때문에 이 경우 우리가 굳이 따로 초기화 하지 않아도 되지만 클래스 static 변수들의 경우 아래와 같은 방법으로 초기화한다. 클래스 안에는 static 함수도 정으할 수 있는데, static 변수가 어떤 객체에 종속되는 것이 아니라, 그냥 클래스 자체에 딱 1개 존재하는 것 처럼, static 함수 역시 어떤 특정 객체에 종속된느 것이 아니라 클래스 전체에 딱 1개 존재하는 함수이다. 

즉, static 이 아닌 멤버 함수들의 경우 객체를 만들어야지만 각 멤버 함수들을 호출할 수 있지만, static 함수의 경우, 객체가 없어도 그냥 클래스 자체에서 호출할 수 있게 된다.

this 포인터

this 라는 것이 C++ 언어 차원에서 정의되어 있는 키워드 인데, 이는 객체 자신을 가리키는 포인터의 역할을 합니다. 즉, 이 멤버 함수를 호출하는 객체 자신을 가리킨다.

const 함수

C++ 에서는 변수들의 값을 바꾸지 않고 읽기 만 하는, 마치 상수 같은 멤버 함수를 상수 함수로써 선언할 수 있다. 이 함수는 다른 변수의 값을 바꾸지 않는 함수라고 다른 프로그래머에게 명시 시킬 수 있다. 당연한게도, 상수 함수 내에서는 객체들의 '읽기'만 수행되며, 상수 함수 내에서 호출 할 수 있는 함수로는 다른 상수 함수 밖에 없다.

 

'개인공부 > C++' 카테고리의 다른 글

멀티 쓰레드  (0) 2023.07.24
sizeof  (0) 2023.03.30
복사 생성자, 소멸자 정리  (0) 2023.03.20
함수의 오버로딩, 생성자 정리  (0) 2023.03.19
객체 지향 프로그래밍 정리  (0) 2023.03.18