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 |
사이트의 정보
코딩하렴
으렴