코딩하렴

C++ DAY4 const

by 으렴

const는 사용자 캡슐화 목적으로 주로 사용

 

 

1. const field  :         선언과 동시에 초기화를 해 주어야 하는데 할 수가 없다.

콜론 초기화 기법으로 해줘야한다.

값을 읽기만 가능하다.

 

2. const method :      field의 값을 함수에서 읽기만 가능하게 한다. (쓰기금지)

 

3. const Object :        고정된 객체 사용 (읽기만 가능)

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
class A
{
    const int a;
    int b;
public:
    A():a(10),b(20)    //아래의 생성자초기화 역할을 수행(콜론초기화)
    {
        //a= 10; 생성자에서 할수 없다. const 변수는 생성과 동시에 초기화해야한다.
        //b=20; 그냥 instance필드는 걍 생성자에서 초기화해도됨 콜론 초기화도됨
    }
    void disp()const //여기는 건들지마! 함수뒤에 붙이면 된다.
    {
        cout<<a<<b<<endl;
    }
};
void main()
{
    A aa;
    aa.disp();
}
cs

 

const의 경우 콜론 초기화 기법으로 초기화를 해야한다.

그냥 일반적인 instance field를 사용해서 초기화 시킬 경우에는 생성자에서 초기화를 해도 되고, 콜론초기화로 해도 된다.

const는 const끼리만 쓸수있다. 그래야 안정적임 (캡슐화)

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;
class A
{
    const int a;
    int b;
public:
    A():a(10),b(20)
    {    }
    void disp()const
    {
        cout<<a<<b<<endl;
    }
    void disp()
    {
        cout<<a<<b<<"일반"<<endl;
    }
};
void main()
{
    const A aa;
    //A aa;
    aa.disp();
}
cs

 

 

void disp()는 현재 두개이다. 함수뒤에 const가 붙어있는 함수와 일반적인 함수가 있다. 이것은 오버로딩이 아니다.

이러한 경우 우선순위가 생기는데 같은 타입(? 형태 :const)를 가진 것을 먼저 우선적으로 부르게 된다.

일반객체는 const를 부를 수 있지만 const는 일반객체를 부를 수 없다. (const는 const끼리만 부를 수 있다.)

즉, 여기서는 1020일반 이렇게 컴파일 되는 것이아니라 1020 을 가진 void disp()const가 호출된다.

 

anci표준에도 const는 쓰면 쓸 수록 캡슐화가 잘되어서 좋다고 나와있다.

 

 

'Programming Language > C and Cpp' 카테고리의 다른 글

C++ 복사 생성자  (0) 2018.03.16
C++ DAY5 Is-a관계  (0) 2018.03.14
C++ DAY4 static method  (0) 2018.03.08
C++ 복사 생성자 / 소멸자 함수  (0) 2018.03.08
C++ DAY3 class와 생성자 함수  (1) 2018.03.07

사이트의 정보

코딩하렴

으렴

활동하기