fullstack

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

  1. [C++] namespace
  2. [C++] 인라인 함수 (Inline Function)
  3. [C++] 디폴트 매개 변수 (Default Parameter)

[C++] namespace

Language/C++

- namespace란?


namespace란 이름을 지니는 공간이라는 뜻으로 특정 영역에 이름을 붙여주기 위한 기법이다.

프로젝트가 대형화 되면서 여러 모듈의 함수이름이 겹쳐 충돌현상이 발생할 수 있는데, namespace를 이용하여 이러한 문제를 해결할 수 있다.


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>
 
namespace A
{
    void func()
    {
        std::cout << "Space A" << std::endl;
    }
}
 
namespace B
{
    void func()
    {
        std::cout << "Space B" << std::endl;
    }
}
 
int main()
{
    A::func();
    B::func();
    return 0;
}



위와 같이 func라는 같은 함수명을 A와 B영역으로 나누어서 사용할 수 있다.

- 범위 지정 연산자 (scope resolution operator)

위 예제에서 namespace에 접근하기 위해서 :: 연산자를 사용하는데, 이를 범위 지정 연산자라고 한다.
즉 A::func() 는 A라는 이름공간안에 있는 func를 참조하겠다는 의미로 사용된다.

- using

C++ 입출력 방식에서 cin, cout, endl도 std라는 공간안에 정의되어 있으므로 참조할 때마다 std:: 를 앞에다 붙여주어야 한다.
이는 using 키워드를 이용하여 선언해두면 std:: 를 매번 앞에 붙이지 않아도 된다.

1
2
3
using std::cin;
using std::cout;
using std::endl;



위와 같이 선언해 두면 cin, cout, endl을 참조할때 자동으로 std 공간안에서 찾게된다.


1
using namespace std;



위 방법은 std 공간안에 있는 모든 이름을 범위 지정 연산자없이 참조할 수 있는 선언으로 더욱 짧고 편리하지만, std 공간안의 모든 선언을 참조하게 되므로 이름충돌이 일어날 확률은 높아지게 된다.


[C++] 인라인 함수 (Inline Function)

Language/C++

인라인 함수란 프로그램 라인 안으로 들어가버린 함수라는 뜻으로 기존 C 에서는 아래와 같이 매크로 함수를 사용하여 구현하였다.


1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
#define SQUARE(x) ((x)*(x))
 
int main()
{
    cout << SQUARE(5<< endl;
}



위의 코드는 전처리 과정에서 SQUARE(5) 부분이 ((5)*(5))로 치환된다.

하지만 이는 긴 함수에 대한 구현이 어려웠는데, C++ 에서는 함수 앞부분에 inline 키워드만 붙여 아래와같이 인라인화 할 수 있다.


1
2
3
4
inline int square(int x)
{
    return x*x;
}



위와 사용하면 긴 함수도 inline 키워드를 붙여 쉽게 인라인화 할 수 있지만 긴 함수를 인라인화 하면 프로그램의 크기도 커지므로 짧은 함수만 인라인화 하는 것이 좋다.


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

[C++] Reference  (0) 2015.11.29
[C++] namespace  (0) 2015.11.28
[C++] 디폴트 매개 변수 (Default Parameter)  (0) 2015.11.28
[C++] 함수 오버로딩 (Function Overloading)  (0) 2015.11.28
[C++] for문 두줄로 구구단 출력하기  (0) 2015.11.09

[C++] 디폴트 매개 변수 (Default Parameter)

Language/C++

디폴트 매개 변수란 함수의 인자에 기본값을 주어 해당 매개 변수가 전달되지 않더라도 기본값으로 사용할 수 있는 것을 말한다.


1
int func(int a=0) { return a; }



위와 같이 정의할 수 있으며 위 함수는 매개변수를 받지 못하면 0을 return하게 된다.

아래는 디폴트 매개 변수를 사용한 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int func(int a=0int b=0int c=0)
{
    return a+b+c;
}
int main()
{
    cout << func() << endl;
    cout << func(1<< endl;
    cout << func(1,1<< endl;
    cout << func(1,1,1<< endl;
}





단 함수 오버로딩과 동시에 잘못 정의하면 문제가 생길수 있으니 주의해야 한다.


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

[C++] Reference  (0) 2015.11.29
[C++] namespace  (0) 2015.11.28
[C++] 인라인 함수 (Inline Function)  (0) 2015.11.28
[C++] 함수 오버로딩 (Function Overloading)  (0) 2015.11.28
[C++] for문 두줄로 구구단 출력하기  (0) 2015.11.09