=================================
=================================
=================================
출처 http://printf.egloos.com/v/1776605
# const 객체
ex) const object p1(10); // 객체의 상수화
위 코드는 객체의 데이터 변경을 허용하지 않겠다는 문장이다.
객체에 const 선언이 붙게되면 이 객체를 대상으로는 const 멤버함수만이 호출이 가능하다.
※ 멤버변수에 저장된 값을 수정하지 않는 함수는 가급적 const로 선언해서 const 객체에서도 호출이 가능하도록
할 필요가 있다.
# const와 함수 오버로딩
함수 오버로딩의 경우 매개변수의 수나 자료형이 달라야 한다.
하지만 다음과 같이 const 선언유무도 함수 오버로딩의 조건에 해당이 된다.
void func() {....}
void func() const {....}
위 함수의 경우에 객체의 const 선언유무에 따라 호출되는 함수가 다르다.
# C++에서의 static
- 전역변수에 선언된 static의 의미
→ 선언된 파일 내에서만 참조를 허용하겠다는 의미
- 함수 내에 선언된 static의 의미
→ 한번만 초기화되고, 지역변수와 달리 함수를 빠져나가도 소멸되지 않는다.
■ static 멤버변수(클래스 변수)
static 멤버변수는 '클래스 변수'라고도 불린다. 일반적인 멤버변수와 달리 클래스당 하나씩만 생성되기 때문이다.
클래스 안에 선언된 static 변수의 경우 별개의 메모리에 할당되는 변수가 아닌 모든 객체가 공유하는 구조가 된다.
※ static 멤버변수는 생성자에서 초기화하면 안된다. static 멤버변수는 객체가 생성될때 동시에 생성되는 변수가
아니고, 이미 메모리공간에 할당이 이뤄진 변수이기 때문이다. 따라서 static 멤버변수의 초기화 문법은 다음과 같이
별도로 정의되어 있다.
int student::objCnt; // static멤버변수의 초기화 문법
■ static 멤버변수의 또다른 접근방법
static 멤버변수는 사실 어디서든 접근이 가능하다. static멤버가 private로 선언되면, 해당 클래스의 객체들만 접근이
가능하지만, public으로 선언되면 클래스의 이름 또는 객체의 이름을 통해서 어디서든 접근이 가능하다.
class SoSimple
{
public:
static int simObjCnt;
public:
SoSimple()
{
simObjCnt++;
}
};
int SoSimple::simObjCnt=0;
■ static 멤버함수
- static 멤버함수 역시 그 특성이 static 멤버변수와 동일하다.
① 선언된 클래스의 모든 객체가 공유한다.
② public으로 선언이 되면, 클래스의 이름을 이용해서 호출이 가능하다.
③ 객체의 멤버로 존재하는 것이 아니다.
※ static 멤버함수 내에서는 static 멤버변수와 static 멤버함수만 호출이 가능하다. 이러한 특성을 잘 활용하면
대부분의 경우에 있어서 전역변수와 전역함수를 대체할 수 있다.
■ const static 멤버
const 멤버변수(상수)의 초기화는 이니셜라이저를 통해야만 가능하다. 그러나 const static으로 선언되는 멤버변수는
다음과 같이 선언과 동시에 초기화가 가능하다.
class SoSimple
{
public:
static int simObjCnt;
public:
SoSimple()
{
simObjCnt++;
}
};
int SoSimple::simObjCnt=0;class CountryArea
{
public:
const static int RUSSIA =1707540;
const static int CANADA =998467;
const static int CHINA =957290;
const static int SOUTH_KOREA =9922;
};
※ const static 멤버변수는 클래스가 정의될 때 지정된 값이 유지되는 상수이기 때문에, 위 예제처럼 초기화가 가능
하도록 문법으로 정의하고 있다.
# mutable 키워드
const 함수 내에서의 값의 변경을 예외적으로 허용하는 키워드이다. mutable을 선언할 경우 const 선언이 무의미
해지기 때문에 가급적 사용을 자제해야 한다.
ex) mutable int num2;
=================================
=================================
=================================
'프로그래밍 관련 > 언어들의 코딩들 C++ JAVA C# 등..' 카테고리의 다른 글
[C++] string to int - string에서 int로 변환 (0) | 2017.06.14 |
---|---|
std::string과 std::wstring간의 문자열 변환 관련 (0) | 2017.06.13 |
c++ CRT 라이브러리를 사용하여 메모리 누수 찾기 관련 (0) | 2017.02.21 |
c++ enum보다 향상된 enum class 관련 (0) | 2017.02.20 |
프로그래밍 언어 람다식 표현 관련 (0) | 2017.02.17 |