fullstack

'전체 글'에 해당되는 글 76건

  1. [C++] explicit 키워드
  2. [C++] static 키워드
  3. [C++] const 키워드

[C++] explicit 키워드

Language/C++

explicit 키워드는 생성자 앞에 붙여 묵시적인 호출을 허용하지 않을 때 사용 된다.

즉 객체 생성 관계를 분명히 하고자 할 경우 사용하며, 모든 생성자의 explicit 키워드를 붙이는 프로그래머도 많다.

아래는 explicit 키워드 사용 예이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class AAA
{
public:
    explicit AAA(int n) { cout << n << endl;}
};
 
int main()
{
    AAA a1(10);
    AAA a2 = 10// error
 
    return 0;
}



AAA a2 = 10; 은 묵시적으로 AAA a2(10)  으로 변환되나 explicit 키워드로 묵시적인 호출을 허용하지 않았으므로 에러가 나타난다.


'Language > C++' 카테고리의 다른 글

[C++] 상속 (Inheritance)  (0) 2015.12.03
[C++] mutable 키워드  (0) 2015.12.03
[C++] static 키워드  (0) 2015.12.02
[C++] const 키워드  (0) 2015.12.02
[C++] 복사 생성자  (0) 2015.12.02

[C++] static 키워드

Language/C++

C언어에서 static 키워드는 지역 변수에 붙여 전역 변수의 특징을 지니게 하는데 사용되었다.

하지만 객체지향에서는 전역 변수, 전역 함수라는 개념이 존재하지 않는다. 따라서 이를 대처하기 위해 static 멤버라는 개념이 등장하였다.

다음은 static 멤버 사용 예이다.


1
2
3
4
5
6
7
8
class AAA
{
    static int count;
public:
    AAA() { cout << count++ << "번째 객체 생성." << endl; }
};
 
int AAA::count = 1;



static 멤버는 main함수가 호출되기도 전에 메모리 공간에 올라가 초기화되므로 public으로 선언이 된다면 객체 생성 이전에도 접근이 가능하다.

또한 객체의 멤버로 존재하는 것이 아니라 선언되어 있는 클래스 내에서 직접 접근할 권한이 부여된 것 뿐이다.


'Language > C++' 카테고리의 다른 글

[C++] mutable 키워드  (0) 2015.12.03
[C++] explicit 키워드  (0) 2015.12.02
[C++] const 키워드  (0) 2015.12.02
[C++] 복사 생성자  (0) 2015.12.02
[C++] friend 선언  (0) 2015.12.02

[C++] const 키워드

Language/C++

const 키워드는 어디에 사용하는가에 따라 다양하게 활용된다.




- const 키워드 기본


const 키워드의 가장 기본적인 사용 3가지는 아래와 같다.



1. 변수를 상수화 한다.


1
2
const int a = 10;
= 20// error



2.  포인터가 가리키는 데이터를 상수화 한다.


1
2
3
int a = 10;
const int* pa = &a;
*pa = 20// error



3. 포인터 자체를 상수화 한다.


1
2
3
4
int a = 10;
int b = 20;
int* const pa = &a;
pa = &b; // error





- 멤버 이니셜라이저 (member initiallizer)


클래스에서 변하지 않는 상수로 멤버변수를 초기화 하고 싶을 때가 있다. 하지만 const로 멤버 변수를 선언 후 생성자에서 조작하려고 할 경우 이미 쓰레기값을 초기값으로 상수화 되었기 때문에 생성자를 통한 초기화를 사용할 수 없다. 

이럴 때 사용하는 것이 멤버 이니셜라이저라는 문법이다. 이것을 사용하면 const 멤버 변수를 초기화할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
class Info
{
    const int id;
    int password;
public:
    Info(int _id, int _password) : id(_id)
    {
        password = _password;
    }
};



위와같으 콜론(:)을 이용하여 const 멤버변수를 초기화 할 수 있으며 콤마(,)를로 구분지어 여러 const 멤버 변수를 초기화 할 수 있다.




- const 멤버 함수


멤버 함수를 선언할 때 const 키워드를 붙여 멤버 함수를 상수화 할 수 있다.

멤버 함수가 상수화되면 이 함수를 통해서 멤버 변수의 값이 변경되는 것은 허용되지 않는다.

다음과 같이 사용할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Info
{
    const int id;
    int password;
public:
    Info(int _id, int _password) : id(_id)
    {
        password = _password;
    }
 
    void showData() const
    {
        cout << "id: " << id << endl;
        cout << "password: " << password << endl;
    }
};



이렇게 사용하면 showData라는 정보를 출력해주기만 하는 함수에서 프로그래머의 실수로 멤버 변수의 값을 변경하는 것을 방지할 수 있다.

또한, 상수화된 함수는 상수화되지 않은 함수의 호출을 허용하지 않을 뿐만 아니라, 멤버 변수의 포인터를 리턴하는 것도 허용하지 않는다.




- const 객체


객체또한 생성과 동시에 상수화 하는 것이 가능하다.

객체가 상수화되면 멤버변수의 조작이 불가능해지며, 상수화된 멤버 함수만 호출이 가능해진다.


1
const AAA a;





- const 키워드를 써야하는 이유


const 키워드는 쓰나 안쓰나 동작은 똑같기 때문에 별로 필요없다고 생각할 수 있으나, 프로그래머의 실수를 줄여주고 프로그램의 안정성을 높여준다.

만약 프로그래머의 실수로 잘못된 코드가 들어갔지만 컴파일에는 이상이 없어 에러메세지를 받을 수 없다면 이는 매우 치명적이다.

그러므로 프로그램을 작성할때 const 키워드를 가급적 많이 사용하는 것이 좋다.


'Language > C++' 카테고리의 다른 글

[C++] explicit 키워드  (0) 2015.12.02
[C++] static 키워드  (0) 2015.12.02
[C++] 복사 생성자  (0) 2015.12.02
[C++] friend 선언  (0) 2015.12.02
[C++] this 포인터  (0) 2015.12.02