Study/Passionate C++ Programming

[열혈 C++ 프로그래밍] (1) C언어 기반 C++ 1

코딩뚜벅이 2024. 1. 21. 12:21

C언어 기반 C++ 1

  • printf와 scanf를 대신하는 입출력 방식
  • 함수 오버로딩
  • 매개변수의 디폴트 값
  • 인라인 함수
  • 이름 공간
  • 범위 지정 연산자
  • 포인터

Printf와 scanf를 대신하는 입출력 방식

iostream
iostream : 신 버전 라이브러리
iostream.h : 구 버전 라이브러리

 


std::endl; 

개행

 


cout =

 console output, 별도의 서식지정 필요 없음, 연이은 입출력 가능

 


cin = 

console input, 별도의 서식지정 필요 없음, 연이은 입출력 가능

 


데이터선언
C : scanf("%s", str);

C++ : cin >> str

 


 

함수 오버로딩

동일한 함수명을 가지면서 매개변수형이 다른 n개의 함수 관계
ex) 함수명이 같은데 매개변수가 다른 것 -> O
ex) 함수명이 같은데 매개변수 자료형이 다른 것 -> O
ex) 함수명이 같은데 함수의 반환형이 다른 것 -> X
ex) void func(int n) <-> int func(int n) -> 오버로딩 관계

 

 

- 반환형만 다른 함수를 오버로딩 할 수 없음
-> 오버로딩은 함수의 반환형을 고려하지 않음

 

 

 

- 매개변수를 const로 오버로딩 할 수 없음

 

 

 

 

- 같은 함수를 static으로 오버로딩 할 수 없음


 

매개변수의 디폴트 값

매개변수 디폴트 값 선언 가능
ex) int func(int num = 10) : num 값을 초기화하지 않으면 디폴트 값 10
- 디폴트 값 선언은 함수 원형을 선언하는 부분에 명시
- 디폴트 값은 오른쪽부터 선언해야 함
ex) int func(int a = 10, int b) -> X

 

인라인 함수

복잡한 함수 정의 가능
- 컴파일러가 동작 처리
- 매크로 함수의 스택호출과 반환과정 없음
+ 인라인 선언의 타당성을 분석하여 실제로 인라인 처리를 할지를 컴파일러가 결정
+ 인라인 선언 없이 인라인 처리하는 경우가 존재
매크로 함수와의 차이점 <-> 매크로 함수는 자료형에서 독립적인 반면, 인라인 함순느 자료형 명시 필요
-> 단점을 template를 통해 해결

매크로 함수: 컴파일 과정에서 에러를 검출하는 디버깅이 어려움

 

 


 

 

이름 공간

범위 지정 연산자를 통해 이름 공간 내 함수 호출 가능
ex) namespace a { simplefunc(); } namespace b { simplefunc(); }
-> a :: simplefunc(); b :: simplefunc();
- 동일한 이름의 함수의 충돌 방지 목적
- 동일한 이름 공간을 반복적으로 선언 가능(=같은 공간에 있는 것으로 간주)
- 동일한 이름 공간 안의 함수는 함수명만으로 호출 가능 <-> 다른 공간의 함수는 이름 공간 명시
- 중첩 가능 (A :: B :: C;)
- 이름 공간에 별칭 지정 가능(namespace a = parent::sub; a :: b;)


 

범위 지정 연산자

특정 함수 내에서 전역 변수에 접근 가능
ex) (특정 함수 내에서) :: a;


 

포인터

메모리에 있는 데이터의 주소를 가지고 있는 변수
& : 어드레스 연산자, 변수 앞에 붙여서 주소 값 확인 가능 (&a -> a의 주소값)
* : 애스크리터 연산자, 자료형 앞에 붙여서 포인터 변수 선언 가능 (int* I -> int형 포인터 변수 I)
ex) int* ptr = &num1; -> int형 포인터 변수 ptr에 변수 num1의 주소값을 대입
ex) *ptr = 10; -> 포인터 변수를 통해 변수에 접근(간접 참조)하여 num1에 10을 대입

 

 

- 배열은 포인터처럼 동작
-> *(a+1) = a[i]