Programming | 프로그래밍 언어/C++

C언어 기반의 C++ 1

gyunnnnnn 2022. 11. 3. 23:57

입출력 형식

  • C++에서는 데이터의 입력, 출력 모두 별도의 포맷 지정이 필요 없다.
  • std::cin>>을 이용하여 입력을 받는다.
  • std::cout<<을 이용하여 출력한다.
  • std::endl을 이용하여 개행한다.

함수 오버 로딩

  • C++은 함수 호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.
  • 매개변수의 선언형태가 다르다면, 동일한 이름의 함수정의가 가능하다. 이것을 함수 오버 로딩이라고 한다.
    // 함수 오버로딩의 예
    int func(char c) { }
    int func(int a) { }
    int func(int a, int b) { }
  • 함수의 이름이 func로 같지만 매개변수의 자료형 또는 개수가 다르다.

매개변수 Default 값

  • 함수의 매개변수에 Default 값을 설정할 수 있다.
int Adder(int num1 = 1, int num2 = 2) 
{
    return num1+num2; 
} 
Adder(); // 1+2 = 3 
Adder(5); // 5+2 = 7 

부분적 디폴트 값 설정

  • 부분적으로 Default값을 설정할 땐 오른쪽 매개변수부터 채우는 형태로 정의해야 한다.
  • 함수에 전달되는 인자는 왼쪽에서부터 오른쪽으로 채워진다.

매크로 함수와 인라인 함수

1. 매크로 함수

  • 일반적인 함수에 비해서 실행속도의 이점이 있다.
  • 자료형에 의존적이지 않은 함수이다.
  • 정의하기가 어렵다.
  • 매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리된다.
#define SQUARE(x) ((x)*(x)) 
SQUARE(1*2*3); // 36 

2. 인라인함수

  • 컴파일러가 함수를 복제하여 main문 안에 넣어준다.
  • 함수를 호출하지 않고 함수의 코드를 그대로 실행한다.
  • 함수 호출 과정이 없으므로 속도가 좀 더 빠르다.
  • 많이 사용하면 실행파일의 크기가 커질 수 있다.
  • 키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해서 처리가 된다.
  • 템플릿을 활용하여 자료형에 의존적이지 않은 인라인 함수를 작성할 수 있다.
template<class T>
inline  T SQUARE(T t) 
{
    return t*t;
} 
SQUARE(4) // 16
SQUARE(2.1) // 4.41

namespace

namespace func1
{
    void func()
    {
        std::cout << "func1::func()" << std::endl;
    }
}

namespace func2
{
    void func()
    {
        std::cout << "func2::func()" << std::endl;
    }
}

func1::func(); // func1의 func() 호출
func2::func2(); // func2의 func() 호출
  • namespace호출을 통해 함수의 중복을 방지할 수 있다.
  • namespace중첩이 가능하다.
  • using을 사용하여 namespace를 명시한다. using namespace std
  • using namespace 000을 통해 000에 선언된 모든 것에 대해 이름공간 지정의 생략을 명령할 수 있다.

범위지정 연산자 ::의 또 다른 기능

  • 전역변수와 함수내의 지역변수의 이름이 같을때 전역변수의 값을 증가시킬때 ::를 사용할 수 있다.
int val = 100; // 전역 변수 
int func() 
{
    int val=20; // 지역변수 
    val+=3; // 지역변수 val의 값 3 증가 
    ::val+=7; //전역변수 val의 값 7 증가 
}

'Programming | 프로그래밍 언어 > C++' 카테고리의 다른 글

복사 생성자  (0) 2022.11.13
생성자, 소멸자, 이니셜라이저, this  (0) 2022.11.11
캡슐화와 const 함수  (0) 2022.11.10
구조체, 클래스, 접근제어지시자  (0) 2022.11.10
C언어 기반의 C++ 2  (0) 2022.11.09