본문 바로가기
IT 컴퓨터_프로그램 /c++

const

by 건축직일상 2015. 10. 5.

const 는 예약어이다

예약어는 변수명이나 함수명으로 못씀


class CObj

{

public:

const    int m_iTest;

int m_iTest2;

const    float m_fTest;

public:

CObj(void)

:m_iTest(10), m_iTest2(20), m_fTest(30.f) // 이니셜라이저 문법사용

{

//m_iTest = 10; 생성자 에서도 초기화는 불가능하다

//생성자가 호출되는 시점은 멤버들이 이미 메모리 공간에 할당된 시점이기때문에 const 멤버를 초기화 할수없다

//이니셜라이저 문법을 사용해서 const 멤버를 초기화 할수있다 

}

CObj(int iTest, int iTest2, float fTest)

:m_iTest(iTest),m_iTest2(iTest2), m_fTest(fTest)

{;}

~CObj(void){;}

};

void main(void)

{

const int J = 10; //초기화된 값으로 고정이 되는것

J = 20; //이런식으로 값은 못바꾼다 상수화 되었기때문에


const int Test; // 이런식으로 초기화 안하면 안됨

//선언과 동시에 초기화가 일어나야 한다

CObj obj;

obj.m_iTest = 10; //안된다

//이니셜라이저 자체가 생성자 몸체 부분이 실행되기전에 실행이 되기때문

//이니셜라이저 문법으로 통해서 const 멤버 변수를 초기화 할수있다 

}


class CTest

{

private:

int m_iValue;

public:

void    Render(void) const

{

//함수뒤에 const가 붙으면 내부에서 멤버변수의 값을 변경하려고 할때 에러가 발생한다

//m_iValue;

Test(); // 컴팡일러가 멤버변수의 조작가능성이 있나 없나를 판단할때 const인가 아닌가 만 보기 때문이다 

// Test 에 const 가 있어야한다

cout << m_iValue << endl;

}

const int*    GetValue(void) const

//리턴값이 변경불가한        함수내에서 값의변경이 불가한 const

//const

{

return &m_iValue;

}


void    Test(void) const

{

cout << "Test"<< endl;

}

public:

CTest(void)

:m_iValue(0)

{;}

~CTest(void){;}

};

void main(void)

{

//const 멤버함수 

CTest Test;

Test.Render();

const int*    p = Test.GetValue();

cout << *p << endl;

//*p = 10 // 이런식 초기화 안됨

// 값을 넘길때 변경없이 단순 사용하는 경우에는 값의 신뢰도를 높이기 위해서 const화 해주는것이 좋다

}


class CSimple

{

public:

void    Render(void)

{

cout << "Render called" << endl;

}

void    Render(void) const

{

cout << "Redner const called " << endl;

}

};

void main(void)

{

//const 객체 

//객체를 생성하고 나면 초기화된 값이 변하지 않게 된다

//const 객체를 통하여 함수 접근시에 데이터으 ㅣ조작여부에 따라서 에러가 날수도 아닐수도 있다 


CSimple simple;

simple.Render(); //Render called


const CSimple simple_const;

simple_const.Redner() // Render const called


//const 객체와 그렇지 않을때 호출되는 함수가 다른것에 유의. const 를통해서도 오버로딩 조건이 만족된다 

}

'IT 컴퓨터_프로그램 > c++' 카테고리의 다른 글

깊은복사 얕은복사  (0) 2015.10.06
static  (0) 2015.10.06
함수 오버로딩  (0) 2015.10.05
클래스2  (0) 2015.10.01
클래스1  (0) 2015.09.30

댓글